我在表格行中有以下视图:
<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。那是现实吗?
答案 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>