Dans un jeu j'afficher une vue personnalisée et un FAB dans un FrameLayout:Comment augmenter layout_marginBottom avec un nombre de pixels?
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<de.slova.GameView
android:id="@+id/gameView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_marginBottom="16dp"
android:layout_marginRight="16dp"
android:src="@drawable/play_white" />
</FrameLayout>
Cependant, la FAB est montré trop faible et obscurcit la barre bleu clair au fond:
J'ai besoin d'augmenter le layout_marginBottom
par la hauteur de la barre bleu clair (indiquée par les flèches rouges à la capture d'écran ci-dessus), de sorte que le FAB est déplacé vers le haut. Je connais la hauteur de la barre en pixels (le contenu de ma vue personnalisée est mis à l'échelle par une matrice) et je pense que je connais le bon endroit pour cette action (la méthode onSizeChanged
dans ma vue personnalisée) - mais mon la difficulté est d'obtenir la valeur layout_marginBottom
du FAB.
Comment y accéder et le modifier s'il vous plaît? J'ai essayé:
@Override
protected void onSizeChanged(int w, int h, int oldW, int oldH) {
super.onSizeChanged(w, h, oldW, oldH);
int h = mBar.getHeight();
ViewGroup.LayoutParams params = mFab.getLayoutParams();
// how to add h to layout_marginBottom here?
mFab.setLayoutParams(params);
}
Par la façon dont j'ai deux méthodes pour traduire entre dp
et px
si nécessaire ici:
public static float px2sp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
public static float sp2px(Context context, float sp) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return sp * scaledDensity;
}
Est-ce que la partie inférieure bleue de la GameView? –
Oui partie de la GameView, sa hauteur en pixels est 'mBar.getHeight()' –