ゲームでは、カスタム ビューと FAB を FrameLayout に表示します。
<?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>
ただし、FAB が低すぎて、下部の水色のバーが見えにくくなっています。
layout_marginBottom
FAB が上に移動するように、水色のバー (上のスクリーンショットの赤い矢印で示されている) の高さだけ を増やす必要があります。
バーの高さをピクセル単位で知っています (カスタム ビューのコンテンツはマトリックスによってスケーリングされます)。このアクションの適切な場所 (カスタム ビューのメソッド) を知っていると思いますonSizeChanged
が、私の困難は理解することですFAB のlayout_marginBottom
値。
アクセスして変更する方法を教えてください。私が試してみました:
@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);
}
ちなみに、必要に応じてここで翻訳するための2つの方法がdp
ありpx
ます。
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;
}