如何通过多个像素增加layout_marginBottom?

如何通过多个像素增加layout_marginBottom?

问题描述:

在游戏我显示在一个的FrameLayout自定义视图和FAB:如何通过多个像素增加layout_marginBottom?

<?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示太低,并且在底部掩盖了浅蓝色条:

screenshot

我需要增加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); 
} 

通过我有两种方法来dppx之间的转换,如果需要在这里顺便说一句:

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; 
} 
+1

是GameView的底部蓝色条部分? –

+0

是GameView的一部分,它的像素高度是'mBar.getHeight()' –

Margin属性是FrameLayout.LayoutParams类的一部分,所以你要投它到FrameLayout.LayoutParams

FrameLayout.LayoutParams param = (FrameLayout.LayoutParams) fab.getLayoutParams(); 
param.bottomMargin = mBar.getHeight(); 
fab.setLayoutParams(param); 
+0

我在Java代码中看不到属性'params.bottomMargin',只有'params.height'和'params.width '。 –

+0

哦,这是一个kotlin代码..将它转换成java –

+0

我明白它是Kotlin,但在执行'ViewGroup.LayoutParams params = mFab.getLayoutParams();'时找不到匹配的属性'' –