android weight(权重值) match_parent

来源:互联网 发布:java 线程间传递数据 编辑:程序博客网 时间:2024/05/20 07:36

weight:将父控件的剩余空间分配

其他不说直接进入重点,当多个子控件的width都为match_parent时的空间分配情况和算法

工具 android studio 2.3.3  Genymotion模拟器   android 4.0

代码

<TextView    android:layout_width="match_parent"    android:layout_height="40dp"    android:text="one"    android:background="#f0f"    android:layout_weight="1"    /><TextView    android:layout_width="match_parent"    android:layout_height="40dp"    android:text="two"    android:background="#00f"    android:layout_weight="2"    /><TextView    android:layout_width="match_parent"    android:layout_height="40dp"    android:text="three"    android:background="#f00"    android:layout_weight="3"    />
效果图


这里的three不见了

控件的宽度公式

一共有6个权重值

来算一算one的分配公式

被设置weight值的控件,宽度应为该控件的原宽度+父控件的剩余控件*比例

one的宽度 = match_parent(原宽度)+(match_parent-(match_parent+match_parent+match_parent))*1/6

原宽度设为1 父控件设为1 有3个子控件都为match_parentone,占六分之一  这6是所有权重加起来

转换为数字就是

one的宽度 = 1+(1-(3))*1/6 = 2/3 计算过程自己领悟吧,我不教数学


所以one占2/3

two的宽度 = 1+(1-(3))*2/6 = 1/3


two占1/3

three的宽度 = 1+(1-(3))*3/6 = 0


three占0

所以three消失的原因,是屏幕没有地方给它

你们可以尝试把one的权重值设为3,而three的权重值设为1,运行看效果

----------------------------------------------------------------------------------------------------------------

再给大家一个公式

既然全部都是match_parent,而屏幕就只有一个,可以这么算 1-3 = -2match_parent  

父屏match_parent - (子屏match_parent*3) = -2match_parent

父屏(1) - 子屏(3) = -2 先计算出-2

父屏(1) - 2*(权重比例) = 宽度

代入公式

one的宽度 = 1 - 2*(1/6)  = 2/3


其他就不算了,如果大家不明白,请多看几遍,还是不明白,我也没有办法,我也是这么过来的,自己慢慢领悟吧,我为了弄明白这个知识点,我看过很多博客,以自己的方式写出来,分享给大家

附上分数计算器:http://zh.numberempire.com/fractionscalculator.php

原创粉丝点击