插曲
昨天去面試,首先要在網上筆試,其中有一道題就是view權重分配的算法。因為權重用得比較少,且一般都是設置0dp或者matchparent,這兩種情況下比較好計算,view寬高肉眼可調。但是今天遇到的題是另一種情況:給定屏幕寬度(dp)和兩個view的寬度(dp)和權重,然后求最后view的寬度。
算法
view最終寬高 = view原始寬/高 + 按比例分配的屏幕剩余寬高
-
例子:
假設LinearLayout(橫向布局)作為根布局,且寬度為400dp;
根布局下有兩個button,分別為btn1(寬度300dp,權重為2)和btn2(寬度300dp,權重為3);由此得出屏幕剩余寬度 = 400dp - (300dp + 300dp)= -200dp;
最終btn1寬度 = 原始寬度 + 權重比 * 屏幕剩余寬度 = 300dp + 2 /(2 + 3)* (-200dp)= 220dp;
最終btn2寬度 = 原始寬度 + 權重比 * 屏幕剩余寬度 = 300dp + 3 /(2 + 3)* (-200dp)= 180dp;
以上只計算了寬度的權重分配,高度權重分配類似。