android Layout_weight属性的详解
2013-10-30 20:13
288 查看
Layout_weight属性的是分配屏幕中各个组件的权重比例,权重分配不同,当然布局结果也完全不同。那么Layout_weight属性到底是什么意思呢?
Layout_weight是屏幕的大小与每一个组件的宽度 或者高度之和相减所得到的剩余空间。再按照各个组件所占的权重值来分配这些剩余空间。当然不是说,能够看见的才叫剩余空间,这只是一个相对的概念。
举个简单的例子,经过测试的。
那么,现在有layout_weight属性,他们的权重分配比例是1:2:3。他们的布局效果是这样的:
有没有发现第三个TextView的布局超出了屏幕之外,而设置权重之后他的布局却是在屏幕内部呢,为什么设置权重前后的布局效果完全变了呢?
首先,这是要分配除三个组件占用屏幕宽度之外的剩余空间,这个空间可以是负数。
那么,如何才能的到剩余空间的大小呢?剩余空间的宽度用X来表示,屏幕的宽度用P来表示吧。
剩余空间:X = P-(100+200+300)
他们三个组件把剩余空间X分成的6份。
第一、二、三个TextView 所占的剩余空间分别为:X1 = 1/6 * X ,X2 = 2/6 * X ,X3 = 3/6 * X。
第一、二、三个TextView 所占屏幕空间分别为:100+X1 , 200+X2 , 300+X3
也就是:
X1 =100+ 1/6*(P-600),
X2 = 200+1/3*(P-600)
X3 = 300+1/2*(P-600)
从这里可以看出规律来:从第一张图也可以知道手机的屏幕没有600dp,那么这个剩余空间就是一个负数。所以第三个TextView所占屏幕的空间比以前小了很多,至少比300dp少。当然,第一个和第二个TextView所占的屏幕空间也相应地缩小了一部分,以至于第三个TextView完全显示在了屏幕上面。
如果3个组件长度都是warp_content,会把剩下来的屏幕空间按照1:2:3的比列分配给3个textview。
而当layout_width=“fill_parent”时,
[align=left]系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就死屏幕的宽度[/align]
[align=left]那么这时候的剩余空间=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 )[/align]
[align=left]那么第一个TextView的实际所占宽度应该=fill_parent的宽度,即parent_width + 他所占剩余空间的权重比列1/6 * 剩余空间大小(-2 parent_width)=2/3parent_width[/align]
[align=left]同理第二个TextView的实际所占宽度=parent_width + 2/6*(-2parent_width)=1/3parent_width;[/align]
[align=left]第三个TextView的实际所占宽度=parent_width + 3/6*(-2parent_width)=0parent_width;所以就是2:1:0的比列显示了。第三个就直接没有空间了。[/align]
大家也可以看看网上的资料:http://www.apkbus.com/android-144917-1-1.html
Layout_weight是屏幕的大小与每一个组件的宽度 或者高度之和相减所得到的剩余空间。再按照各个组件所占的权重值来分配这些剩余空间。当然不是说,能够看见的才叫剩余空间,这只是一个相对的概念。
举个简单的例子,经过测试的。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/textView1" android:layout_width="100dp" android:layout_height="wrap_content" android:text="TextView" android:layout_weight="1"/> <TextView android:id="@+id/textView2" android:layout_width="200dp" android:layout_height="wrap_content" android:text="TextView" android:layout_weight="2" /> <TextView android:id="@+id/textView3" android:layout_width="300dp" android:layout_height="wrap_content" android:text="TextView" android:layout_weight="3"/> </LinearLayout>如果上面布局没有设置layout_weight属性,那么他的布局效果是这样的:
那么,现在有layout_weight属性,他们的权重分配比例是1:2:3。他们的布局效果是这样的:
有没有发现第三个TextView的布局超出了屏幕之外,而设置权重之后他的布局却是在屏幕内部呢,为什么设置权重前后的布局效果完全变了呢?
首先,这是要分配除三个组件占用屏幕宽度之外的剩余空间,这个空间可以是负数。
那么,如何才能的到剩余空间的大小呢?剩余空间的宽度用X来表示,屏幕的宽度用P来表示吧。
剩余空间:X = P-(100+200+300)
他们三个组件把剩余空间X分成的6份。
第一、二、三个TextView 所占的剩余空间分别为:X1 = 1/6 * X ,X2 = 2/6 * X ,X3 = 3/6 * X。
第一、二、三个TextView 所占屏幕空间分别为:100+X1 , 200+X2 , 300+X3
也就是:
X1 =100+ 1/6*(P-600),
X2 = 200+1/3*(P-600)
X3 = 300+1/2*(P-600)
从这里可以看出规律来:从第一张图也可以知道手机的屏幕没有600dp,那么这个剩余空间就是一个负数。所以第三个TextView所占屏幕的空间比以前小了很多,至少比300dp少。当然,第一个和第二个TextView所占的屏幕空间也相应地缩小了一部分,以至于第三个TextView完全显示在了屏幕上面。
如果3个组件长度都是warp_content,会把剩下来的屏幕空间按照1:2:3的比列分配给3个textview。
而当layout_width=“fill_parent”时,
[align=left]系统先给3个textview分配他们所要的宽度fill_parent,也就是说每一都是填满他的父控件,这里就死屏幕的宽度[/align]
[align=left]那么这时候的剩余空间=1个parent_width-3个parent_width=-2个parent_width (parent_width指的是屏幕宽度 )[/align]
[align=left]那么第一个TextView的实际所占宽度应该=fill_parent的宽度,即parent_width + 他所占剩余空间的权重比列1/6 * 剩余空间大小(-2 parent_width)=2/3parent_width[/align]
[align=left]同理第二个TextView的实际所占宽度=parent_width + 2/6*(-2parent_width)=1/3parent_width;[/align]
[align=left]第三个TextView的实际所占宽度=parent_width + 3/6*(-2parent_width)=0parent_width;所以就是2:1:0的比列显示了。第三个就直接没有空间了。[/align]
大家也可以看看网上的资料:http://www.apkbus.com/android-144917-1-1.html
相关文章推荐
- android:layout_weight属性详解
- android:layout_weight属性详解 (转)
- Android weight属性详解
- android:layout_weight属性详解
- Android之layout_weight属性详解
- LinearLayout中的layout_weight属性详解
- android:layout_weight属性详解
- 详解 Android Views 元素的 layout_weight 属性
- LinearLayout的andrid:layout_weight属性的使用详解
- android:layout_weight属性详解
- android中布局文件中 layout_weight 的属性详解
- android:layout_weight属性详解
- Android weight属性详解
- android:layout_weight属性详解
- android:layout_weight属性详解(转)
- Android布局中的layout_weight和weightSum属性的详解及使用
- 日积月累:LinearLayout的andrid:layout_weight属性的使用详解
- android:layout_weight属性详解
- weight 属性详解 和imageview简单适配
- android:layout_weight属性详解