開發(fā)中需要等比例放大子view,去填滿父布局。因為子View的大小比例與父布局不同,所以最終結(jié)果是子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
結(jié)論
在RelativeLayout中,子View的大小不能超過父布局。
最后
具體原因我也不是很清楚,懷疑和RelativeLayout的布局算法有關,有時間看下源碼找找原因...。如果您知道原理,希望能幫忙解惑哈??