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

<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。 那是现实的吗?

#1楼 票数: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));
    }
});

#2楼 票数:0

包装相对布局没有尺寸,例如width = match_parent和height = wrap_content。 而且,如果您想重新测量某些内容,请创建自己的布局类并覆盖onmeasure方法。 然后,您可以自己测量视图。

#3楼 票数: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>

  ask by YoYoMyo translate from so

未解决问题?本站智能推荐:

1回复

更改高度后,我的视图不可见

当我减小视图高度时,一切正常,但是当我再次尝试增大高度时,它变得不可见: 普通视图: 减少并增加视线高度后 希望您能理解我的问题,我不是以编程方式将视图设置为不可见,如何解决此问题?
1回复

平移动画后更改视图高度?

在我的活动中,我有一个BottomNavigationView和一个RecyclerView ,我想要做的是在滚动视图时隐藏BottomNavigationView ,我正在使用以下代码: 这工作正常,除了它仍然显示视图的边界,所以在隐藏BottomNavigationView我得到一个空矩形。 使
1回复

更改视图高度后,getY()值不变

我有一个框架布局,可以根据不同的情况添加不同的高度视图。 我想知道在添加视图前后框架布局的Y轴位置。 因此,在添加视图之前,我在帧布局上调用getY()返回1891,这是正确的,一旦添加了新视图,它仍然返回1891,这是错误的,因为帧布局在屏幕上方较高,因此应该减少。 我已经检查了两
3回复

Android:方向更改后的视图宽度和高度

我需要获取WebView的宽度和高度,并将它们传递到要在WebView中加载的URL的查询字符串中。 我在onResume()中找到了一种方法。 由于此时尚未计算宽度和高度,因此我在UI加载后将Runnable发布到要排队的WebView中。 这是我的问题:当方向更改时,我在onConf
2回复

更改列表视图高度后,多次调用AndroidgetView()

所以我有这个listview,其高度为fillparent ,并且主要是占据了屏幕大小的一半,但是之后我需要更改此listview的父级布局。 在这里,我开始注意到该应用程序异常延迟,经过一些诊断,我了解到适配器的getView()被调用了很多次, PS:当listview高度为wrapc
1回复

RecylerView更改布局宽度和高度后不重新渲染图像

我有这个RecyclerView 如果我将高度从match_parent更改为wrap_content ,它将不会显示图像,但会显示图像,这是怎么回事。 MainActivity布局 Recylerview项目布局
1回复

如何根据宽度更改视图的高度?

我有ConstraintLayout,里面有4个ImageViews,我需要放置任何ImageView重量(如LinearLayout),并根据宽度更改视图的高度。 这就是我需要的: 因此,如您所见,我有4个具有相同宽度的视图,并且高度像宽度一样变化。 在向您展示我想做的事情之后
2回复

点击更改视图高度

我有一个TextView,当前它的高度为0dp,我希望每次单击按钮时它都可以提高20dp