如何设置bottom_margin等于它的高度?

时间:2015-11-26 10:59:32

标签: android layout

我想将底部边距设置为等于视图/布局的高度。

 <FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
    //Main layout
    <LinearLayout
        android:id="@+id/content_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        .
        .
        .
    </LinearLayout>

    //Bottom drawer layout
    <LinearLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        .
        .
        .
    </LinearLayout>
</FrameLayout>

如何将第二个孩子的下边距添加到其高度,以便它离开屏幕? 是否可以通过xml属性?

1 个答案:

答案 0 :(得分:1)

你无法在xml中获得视图的高度。

您可以使用ViewTreeObserver动态获取视图的高度,然后您可以设置该视图的边距。

以下是您可以动态执行的操作:

LinearLayout linearLayout = (LinearLayout) findViewById(R.id.layoutid);

final ViewTreeObserver vto = linearLayout.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @SuppressWarnings("deprecation")
        @Override
        public void onGlobalLayout() {
            //get LayoutWidth and height here
            int layoutWidth = linearLayout.getWidth();
            int layoutHeight = linearLayout.getHeight();

            //set layout margin here
            LinearLayout.LayoutParams llp = linearLayout.getLayoutParams();
            llp.bottomMargin = layoutHeight;
            linearLayout.setLayoutParams(llp);

            //Then remove layoutChange Listener
            ViewTreeObserver vto = linearLayout.getViewTreeObserver();
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                vto.removeOnGlobalLayoutListener(this);
            } else {
                vto.removeGlobalOnLayoutListener(this);
            }
        }
    });