RelativeLayout子View大小管教的一个问题

开发中需要等比例放大子view,去填满父布局。因为子View的大小比例与父布局不同,所以最终结果是子View会比父布局大,有一部分会在父布局的外面。如下图所示:

超出的两种情况.png

一开始,我想想应该很简单,只需要重新设置子View的LayoutParams即可。如下所示:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(1000, 1000);
mChildView.setLayoutParams(params);

打印了设置之前和之后的View宽高看了一下:

02-18 04:37:20.593 2101-2101/? I/System.out: mLayout is 788:788
02-18 04:37:20.593 2101-2101/? I/System.out: mChildView is 263:263
02-18 04:37:24.011 2101-2101/? I/System.out: mLayout is 788:788
02-18 04:37:24.011 2101-2101/? I/System.out: mChildView is 788:788

mChildView的大小是变了,但是它只是撑满了父布局而已。。。

因为我的布局是比较复杂的,父布局是作为其他layout的子View存在的。刚开始以为是嵌套或者是weight设置导致的。但是试了一下,都没有效果。

所以还是从父布局入手。我将父布局换成FrameLayout,再测试,竟然可以了!!!

02-18 05:04:05.485 2251-2251/? I/System.out: mLayout is 788:788
02-18 05:04:05.485 2251-2251/? I/System.out: mChildView is 263:263
02-18 05:04:07.266 2251-2251/? I/System.out: mLayout is 788:788
02-18 05:04:07.266 2251-2251/? I/System.out: mChildView is 1000:1000

结论

在RelativeLayout中,子View的大小不能超过父布局。

最后

具体原因我也不是很清楚,怀疑和RelativeLayout的布局算法有关,有时间看下源码找找原因...。如果您知道原理,希望能帮忙解惑哈😁

推荐阅读更多精彩内容