您的位置:首页 > 移动开发 > Android开发

android Layout_weight属性的详解

2013-10-30 20:13 288 查看
Layout_weight属性的是分配屏幕中各个组件的权重比例,权重分配不同,当然布局结果也完全不同。那么Layout_weight属性到底是什么意思呢?

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: