LinearLayout权重算法

插曲

昨天去面试,首先要在网上笔试,其中有一道题就是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;

以上只计算了宽度的权重分配,高度权重分配类似。

你可能感兴趣的:(LinearLayout权重算法)