插曲
昨天去面试,首先要在网上笔试,其中有一道题就是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;
以上只计算了宽度的权重分配,高度权重分配类似。
网友评论