渲染后是否可以更改视图的高度

时间:2015-01-14 18:59:41

标签: android

我在表格行中有以下视图:

<TableRow>
   <RelativeLayout>
       <RelativeLayout 
           android:id="@+id/back_layer"
           android:layout_width="match_parent"
           android:layout_height="match_parent"/>

       <LinearLayout 
           android:id="@+id/front_layer"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"/>

   </RelativeLayout>
</TableRow>

back_layer和front_layer相互重叠。两者都应具有相同的大小并填充父视图。 back_layer必须位于front_layer之下,因此back_layer在front_layer之前呈现。

问题是front_layer有任意高度。由于渲染顺序,当渲染back_layer时,back_layer无法知道front_layer的最终高度。 front_layer与父级具有相同的高度。我很难让back_layer填充其父高。

我确信在添加front_layer后我可以添加back_layer。哪里是正确的地方(我尝试在适配器中做它,它不起作用)?我该怎么办呢?我将需要表的引用,并更改表中每一行的back_layer。那是现实吗?

3 个答案:

答案 0 :(得分:1)

等待测量前部,然后设置背部高度:

final LinearLayout front = (LinearLayout) findViewById(R.id.front_layer);
final RelativeLayout back = (RelativeLayout) findViewById(R.id.back_layer);
front.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
    @Override
        public void onLayoutChange(View v, int l, int t, int r, int b, 
                                   int oldL, int oldT, int oldR, int oldB) {
        front.removeOnLayoutChangeListener(this);
        int height = front.getLayoutParams().height;
        back.setLayoutParams(new RelativeLayout
                .LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height));
    }
});

答案 1 :(得分:0)

包装器relativelayout没有像width = match_parent和height = wrap_content这样的维度。 如果您想重新测量某些内容,请创建一个自己的布局类并覆盖onmeasure方法。然后你可以自己测量视图。

答案 2 :(得分:0)

如果我假设你的目标正确并且 back_layer 就像一个背景,你可以用这种方式简化你的布局:

<TableRow>
    <FrameLayout
        android:id="@+id/back_layer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:id="@+id/front_layer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

            <!-- content -->

        </LinearLayout>
    </FrameLayout>
<TableRow>