- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#0045f5"
- android:gravity="center"
- android:text="1" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff47"
- android:gravity="center"
- android:text="2"
- android:layout_weight="1"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#ff5600"
- android:gravity="center"
- android:layout_weight="1"
- android:text="3" />
- </LinearLayout>
为什么效果是这个样子呢,首先3个文本框的宽度都是“wrap_content”,根据视图内部内容自动扩展,LinearLayout就先给3个TextView分配空间适当的空间大小,假设为每个TextView分配10dip的宽度,屏幕的宽度为480dip, 那么LinearLayout的剩余空间就是 480 - 3*10 = 450dip,由于第一个TextView没有设置layout_weight,所以它的宽度就是10dip,而后面两个TextView设置layout_weight都是1,所以后面两个TextView就平均分配LinearLayout的剩余空间,即为 450 / 2 = 225dip,所以后面两个TextView的宽度为10 + 225 = 235dip
2.
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#0045f5"
- android:gravity="center"
- android:text="1" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#00ff47"
- android:gravity="center"
- android:text="2222222222222222222"
- android:layout_weight="1"/>
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="#ff5600"
- android:gravity="center"
- android:layout_weight="1"
- android:text="3" />
- </LinearLayout>
你本来想让后面两个TextView平均分配剩余控件,可是下面的效果却并不是你想要的,如下图
其实因为3个TextView的宽度都是”wrap_content“,LinearLayout会先按照TextView里面的内容分配好大小,由于第2个TextView内容很多,所以LinearLayout为其分配更多的空间,使得剩余空间变小了,原理和上面的一样,那么我们在实际开发中要怎么设置按比例分配呢。知道原理其实就很简单,比如我们想要3个TextView按照1:2:3的效果
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:background="#0045f5"
- android:gravity="center"
- android:layout_weight="1"
- android:text="1" />
- <TextView
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:background="#00ff47"
- android:gravity="center"
- android:text="2222222222222222222"
- android:layout_weight="2"/>
- <TextView
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:background="#ff5600"
- android:gravity="center"
- android:layout_weight="3"
- android:text="3" />
- </LinearLayout>
我们只需要将3个TextView的宽度设置为0dip,首先LinearLayout为3个TextView分配0dip的宽度,剩余空间就是 480 - 3 * 0 = 480dip,然后剩余空间在按照权重分配,所以我们看到的效果就是1:2:3
通过上面的讲解,也许你会得出一个结论,权重越大,LinearLayout为其分配的空间就越大,我只能说这个结论下有点早了,我们继续看布局
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#0045f5"
- android:gravity="center"
- android:layout_weight="1"
- android:text="1" />
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#00ff47"
- android:gravity="center"
- android:text="2"
- android:layout_weight="2"/>
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#ff5600"
- android:gravity="center"
- android:layout_weight="2"
- android:text="3" />
- </LinearLayout>
也许你会很纳闷,怎么不是你想要的1:2:2的效果,我来为你解决疑惑吧,原理跟上面的还是一样的,因为我们这里为每个TextView设置的宽度为”fill_parent",即为充满整个LinearLayout,假如屏幕依然为480dip, 首先LinearLayout为3个TextView分配的宽度为480dip,屏幕剩余宽度为 480 - 3* 480 = -960dip,然后3个TextView按照权重分配剩余空间,第一个TextView分配宽度为 480 + (-960) * (1/5) = 288dip,后面两个TextView就为480 + (-960) * (2/5) = 96dip,比例为3:1:1
参考网址:http://blog.csdn.net/xiaanming/article/details/13630837