浅析LinearLayout的weight属性
2016-03-07 22:12
162 查看
引言
LinearLayout作为常用的四大布局之一在开发过程中扮演着重要的角色,而weight属性则是线性布局中所特有的。weight的使用
首先先说明下控件尺寸的计算公式(以宽度为例):finalWidth=baseWidth+remianWidth*prop---------------(a) 其中: finalWidth:最终控件的宽度; baseWidth:xml中android:layout_width的值 prop:该控件所占的比例
关于weight属性的使用,官方的建议是一致使用“0dp”,但在实际开发中或许会看到一些使用“wrap-content”和“march-content”的情况。
线上布局文件代码(其中XXX未明确,留着后面分析):
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="XXX" android:layout_height="wrap_content" android:layout_weight="2"/> <TextView android:layout_width="XXX" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:layout_width="XXX" android:layout_height="wrap_content" android:layout_weight="2"/> </LinearLayout>
下面来计算下各个情况下的weight分配。
假设该LinearLayout的宽度为x。
android:layout-width=”0dp”
按照公式(a),容易得到3个TextView的宽度分别为;wid_tv01=0+(2/5)*x=2x/5; wid_tv02=0+(1/5)*x=x/5; wid_tv03=0+(2/5)*x=2x/5; 则对应的宽度分配为2:1:2。
效果图如下:
此时TextView中设置text属性也是不影响的, 因为baseWidth此时已经设置为0dp了。
android:layout-width=”march-content”
首先计算下剩余宽度remianWidth为:remainWidth=width_01-width_02;-------------------------(b) 其中: width_01为实际的最大宽度,即x; width_02为理论的所需宽度,即3x(3个控件,每个控件一个x);
按照公式(b)可以计算现在的remianWidth=-2x。
按照公式(a),容易得到3个TextView的宽度分别为;
wid_tv01=x+(2/5)*(-2x)=x/5; wid_tv02=x+(1/5)*(-2x)=3x/5; wid_tv03=x+(2/5)*(-2x)=x/5; 则对应的宽度分配为1:3:1。
效果图如下:
同样的,现在在TextView中设置text也是没影响的。
android:layout-width=”wrap-content”
第一种未设置text属性,即baseWidth=0;情况同 android:layout_width=”0dp”。第二种设置了text属性,此时的baseWidth则不为0,假设3个TextView的text宽度分别为均为270dp,LinearLayout的宽度x为360。(数据仅仅为了演示整倍数,无实际意义) 、
按照公式(b),计算得
remianWidth=360-3*270=-450;
按照公式(a),容易得到3个TextView的宽度分别为;
wid_tv01=270+(2/5)*(-450)=90; wid_tv02=270+(1/5)*(-450)=180; wid_tv03=270+(2/5)*(-450)=90; 则对应的宽度分配为1:2:1。
效果图如下:
小结
其实控件尺寸weight的分配,只要牢记公式(a)即可,只不过有时候在计算剩余宽度时需要留心下。当然最好还是都按照谷歌建议的统一设置为”0dp”最好。相关文章推荐
- POJ 2528 Mayor's posters(离散化+区间set线段树)
- 最长公共子序列(连续)
- #Android学习#NavigationView基础
- Android开发涉及到的英文
- C语言的编译和链接
- 面试
- 针对三大框架一些面试题
- 蓝桥杯_基础练习《字符串对比---29》
- JVM OOM处理
- 感想
- Linux的用户与权限管理
- 算法导论学习笔记(一)排序算法之快速排序
- C语言常用算法汇总
- Overfitting-Regulization L1\L2正则化
- 解析html语句的JS事件
- 8.11 编程练习
- html DOM和xml DOM的区别于联系
- 浅谈如何用Java操作MongoDB
- 53.FIB词链
- 个人作业——数据求和