Android中layout_weight属性解析

      为了更好的对空间进行布局,在LinearLayout中使用layout_weight,然后对于这一属性,在有些书上或者Android的初学者直接认为layout_weight值越大,控件权重就越大,所占用的空间就越大或者layout_wight值越小,控件空间就越大。这两种都是片面的,没有真正认识到layout_weight含义以及如何布局。下面首先演示使用代码为什么会有这两种感觉。

1.演示权重成反比

LinearLayout设置水平布局,然后里面空间宽度为fill_parent,layout_weight属性比为3:1,效果如下

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2     xmlns:tools="http://schemas.android.com/tools"

 3     android:layout_width="fill_parent"

 4     android:layout_height="fill_parent"

 5     android:orientation="horizontal">

 6     <TextView 

 7         android:background="#ff0000"

 8         android:layout_width="fill_parent"

 9         android:layout_height="fill_parent"

10         android:layout_weight="1"

11         android:text="红色背景"

12         android:textColor="#ffffff"/>

13     <TextView 

14         android:background="#00ff00"

15         android:layout_width="fill_parent"

16         android:layout_height="fill_parent"

17         android:layout_weight="3"

18         android:text="绿色背景"

19         android:textColor="#ffffff"/>

20      

21 </LinearLayout>

Android中layout_weight属性解析

2.演示权重成正比

LinearLayout设置水平布局,然后里面空间宽度为0dip,layout_weight属性比为3:1,效果如下

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2     xmlns:tools="http://schemas.android.com/tools"

 3     android:layout_width="fill_parent"

 4     android:layout_height="fill_parent"

 5     android:orientation="horizontal">

 6     <TextView 

 7         android:background="#ff0000"

 8         android:layout_width="0dip"

 9         android:layout_height="fill_parent"

10         android:layout_weight="1"

11         android:text="红色背景"

12         android:textColor="#ffffff"/>

13     <TextView 

14         android:background="#00ff00"

15         android:layout_width="0dip"

16         android:layout_height="fill_parent"

17         android:layout_weight="3"

18         android:text="绿色背景"

19         android:textColor="#ffffff"/>

20      

21 </LinearLayout>

Android中layout_weight属性解析

3.Layout_wight布局计算

     无论空间大小与权值成正比还是反比这一些说法都是不正确,Android中系统有一种计算空间大小的方式。首先根据layout_width的大小分别布局空间,然后将剩余空间按照layout_weight设置的权值比分配空间,如果没有设置,默认为0。

      控件所占空间大小=layout_width空间大小+(剩余空间)*该空间weight权值     剩余空间可正可负。

      这里的剩余空间,即当布满空间后剩下的空间,当所有控件layout_width属性为fill_parent(屏幕满屏),这时超出的部分为剩余空间,只是其中值为负值。下面用具体例子数目。LinearLayout内3个TextView,layout_width=“fill_parent”  layout_weight比为1:2:3。

      一个fill_parent=满屏X,LinearLayout布局child子控件时会measure两次,第一次,分别布局每个TextView空间的大小,即textview1=X,textView2=X,textView3=X;第二次分配剩余空间,剩余空间大小=X-3X=-2X,即超出了2个满屏,textview1权值1/6,textview2权值2/6,textview3权值3/6,所以

     textview1=X+(-2X)*1/6=2/3X

     textview2=X+(-2X)*2/6=1/3X

     textview3=X+(-2X)*3/6=0

根据上面计算得到textview1占2/3屏幕,textview2占1/3屏幕,textview3不显示。

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

 2     xmlns:tools="http://schemas.android.com/tools"

 3     android:layout_width="fill_parent"

 4     android:layout_height="fill_parent"

 5     android:orientation="horizontal">

 6     <TextView 

 7         android:background="#ff0000"

 8         android:layout_width="fill_parent"

 9         android:layout_height="fill_parent"

10         android:layout_weight="1"

11         android:text="红色背景"

12         android:textColor="#ffffff"/>

13     <TextView 

14         android:background="#00ff00"

15         android:layout_width="fill_parent"

16         android:layout_height="fill_parent"

17         android:layout_weight="2"

18         android:text="绿色背景"

19         android:textColor="#ffffff"/>

20     <TextView 

21         android:background="#0000ff"

22         android:layout_width="fill_parent"

23         android:layout_height="fill_parent"

24         android:layout_weight="3"

25         android:text="蓝色背景"

26         android:textColor="#ffffff"/>

27 </LinearLayout>

Android中layout_weight属性解析

你可能感兴趣的:(android)