Android布局中的layout_weight和weightSum属性的详解及使用

时间:2022-11-11 04:34:08

由于Android设备的尺寸大小不一,种类繁多,当我们在开发应用的时候就要考虑屏幕的适配型了,尽可能让我们的应用适用于主流机型的尺寸,这样我们的应用不会因为尺寸不同而不美观,解决屏幕适配问题的方法有很多,在这里我所讲的是其中的一种解决方案---巧妙的使用layout_weight属性。

     在布局中Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置它所占据屏幕的权重。

1.layout_weight属性  

   首先我们先看下效果,然后再给出计算公式。

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
 2     xmlns:tools="http://schemas.android.com/tools"  
 3     android:layout_width="match_parent"  
 4     android:layout_height="match_parent"  
 5     android:orientation="horizontal" >  
 6   
 7     <Button  
 8         android:layout_width="0dp"  
 9         android:layout_height="wrap_content"  
10         android:layout_weight="1"  
11         android:text="buttton1" />  
12   
13     <Button  
14         android:layout_width="0dp"  
15         android:layout_height="wrap_content"  
16         android:layout_weight="2"  
17         android:text="button2" />  
18   
19 </LinearLayout>

Android布局中的layout_weight和weightSum属性的详解及使用

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
 2     xmlns:tools="http://schemas.android.com/tools"  
 3     android:layout_width="match_parent"  
 4     android:layout_height="match_parent"  
 5     android:orientation="horizontal" >  
 6   
 7     <Button  
 8         android:layout_width="match_parent"  
 9         android:layout_height="wrap_content"  
10         android:layout_weight="1"  
11         android:text="buttton1" />  
12   
13     <Button  
14         android:layout_width="match_parent"  
15         android:layout_height="wrap_content"  
16         android:layout_weight="2"  
17         android:text="button2" />  
18   
19 </LinearLayout> 

Android布局中的layout_weight和weightSum属性的详解及使用

效果如下:Android布局中的layout_weight和weightSum属性的详解及使用

 

 

    计算公式如下:

     首先我们假设屏幕的宽度为L

     实际宽度 = 控件原来的长度 + 剩余空间所占百分比的宽度

     比如第一图片上的计算式子如下

      button1实际宽度 = 0 + 1/(1+2)L= 1/3L     button2实际宽度 = 0 +2/(1+2)L = 2/3L

     第二张图片上的计算式子如下 

      button1实际宽度 = L +1[L-(L+L)]/(1+2) L = 2/3 L    button2实际宽度 = L + 2[L-(L+L)]/(1+2) L = 1/3 L

     好了,看到这里weight属性是不是很好理解,最主要的是对剩余空间的理解 。

2.weightSum属性

android:weightSum属性在官方文档中的解释包含下面的内容:“定义weight综合的最大值,如果未指定该值,以所有子师徒的layout_weight属性的累加值作为总和的最大值。典型案例是:通过指定子视图的layout_weight属性为0.5.并设置LinearLayout的weightSum属性为1.0,实现子视图占据可用宽高的50%”。

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
 2     android:layout_width="match_parent"  
 3     android:layout_height="wrap_content"  
 4     android:gravity="center"  
 5     android:orientation="horizontal"  
 6     android:weightSum="1" >  
 7   
 8     <Button  
 9         android:layout_width="0dp"  
10         android:layout_height="wrap_content"  
11         android:layout_weight="0.5"  
12         android:text="test" />  
13   
14 </LinearLayout>  

Android布局中的layout_weight和weightSum属性的详解及使用