Android:拉伸布局高于另一个

时间:2015-07-03 14:38:18

标签: android android-relativelayout

我使用ContentLayout创建布局(wrap_content)。 我想在其上方显示与LoadingLayout相同大小的加载布局(ContentLayout)。 像这样:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    <LinearLayout.
            android:id="@+id/ContentLayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            ...

    </LinearLayout>


    <RelativeLayout
            android:id="@+id/LoadingLayout"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            ...

    </RelativeLayout>

</RelativeLayout>

但是当我希望在LoadingLayout中设置onMeasure尺寸时,它将仅以第二次机会设置为正确尺寸。 只能这样:

活动

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) loadingLayout.getLayoutParams();
    params.height = getMeasuredHeight();
    loadingLayout.setLayoutParams(params);

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); // android realignment hack
}

我认为这是一个黑客攻击。你有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要LoadingLayout来保持ContentLayout

的宽度
<RelativeLayout
    android:id="@+id/LoadingLayout"
    android:layout_alignLeft="@id/ContentLayout"
    android:layout_alignRight="@id/ContentLayout"
    ....>
....
</RelativeLayout>

编辑:以下是高度的一种方式

您可以在全局刷新发生时添加一次性侦听器。然后将提供所有尺寸。

// in your activity
@Override
protected void onCreate(Bundle state) {
    final View loading = findViewById(R.id.LoadingLayout);
    final View content = findViewById(R.id.ContentLayout);
    content.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            content.getViewTreeObserver().removeOnGlobalLayoutListener(this);
            loading.getLayoutParams().height = content.getHeight();
            loading.onRequestLayout();
            loading.invalidate();
        }
    }
 }