码迷,mamicode.com
首页 > 移动开发 > 详细

Android LinearLayout布局的layout_weight属性探究

时间:2016-05-18 18:50:51      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:

Android布局文件中的layout_weight属性仅在LinearLayout布局中有效。

google推荐:当设置了控件的layout_weight属性时,该控件相应的layout_width或者layout_height属性应该设置为0dp。

如果设置了控件的layout_weight属性同时,又设置了layout_width或者layout_height属性,此时有多种情况需要分析,(可能某些控件设置了layout_weight属性,某些没有设置,设置了layout_weight属性的控件中,其相应的layout_width或者layout_height属性可能相同,也可能不同,本文最后会简单介绍几种情况),编程是为了方便,不是为了自找麻烦(google都不推荐的行为,自己又何必自找麻烦)。

以下例子中设置了layout_weight属性的控件,其对应的layout_width或者layout_height属性都是0dp。

下面谈谈我对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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button 
        android:text="Button1"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

情形二

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <Button 
        android:text="Button1"
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

情形三

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <Button 
        android:text="Button1"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

情形四

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <Button 
        android:text="Button1"
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

情形五

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="100dp"/>

    <Button 
        android:text="Button1"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

情形六

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_width="match_parent"
        android:layout_height="100dp"/>

    <Button 
        android:text="Button1"
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>

技术分享

情形七

<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <Button 
        android:text="Button1"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>

技术分享

情形八
<?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="vertical" >
    
    <Button 
        android:text="Button2"
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <Button 
        android:text="Button1"
        android:layout_weight="0"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>
    
</LinearLayout>
技术分享

从以上例子中,不难得出如下结论:

1. 布局文件中所有控件都设置了layout_weight属性时,就按照layout_weight的大小来分配控件,值越大分配的空间越大,反之,值越小分配的空间越小。

2. 布局文件中一部分控件设置了layout_weight属性,一部分控件没有设置layout_weight属性时,没有设置layout_weight属性的控件优先分配控件,分配后如果屏幕上还有剩余空间,再给设置了layout_weight属性的控件分配。(没设置layout_weight属性的控件具有空间优先分配权)。

3. 如果空间的layout_weight属性值设置为0,则该控件不会再屏幕上显示。

-----------------------------------------------------------------分割线-----------------------------------------------------------------

------------------------------------------------------下面的例子是非推荐的-----------------------------------------------------

情形一

<?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="vertical" >

    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button1" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button3" />    

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />
    
</LinearLayout>

技术分享

情形二

<?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="vertical" >

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="Button1" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button3" />    

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />
    
</LinearLayout>
技术分享

情形三

<?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="vertical" >
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Button2" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:text="Button1" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button3" />    

    
</LinearLayout>
技术分享

情形四:注意此时Button3已经超出了屏幕

<?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="vertical" >
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button1" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button3" />    

    
</LinearLayout>
技术分享

情形五

<?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="vertical" >
    
   <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Button2" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="0"
        android:text="Button1" />
    
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button3" />   
    
</LinearLayout>
技术分享

以上只是简单的找了几个例子,没有列举所有的情形,从上面的例子中,总结一下部分结论

1. 优先显示没有设置layout_height属性值或者属性值为0的控件,如果两种都存在则按照位置先后顺序依次显示(前提是屏幕还有剩余空间)

2. 如果同时存在layout_weight属性值不为0的控件和layout_weight属性值为0的控件,虽然优先显示layout_weight属性值为0的控件,但是,控件在布局文件中的先后顺序也会对屏幕显示产生影响,例如情形四和情形五所示,两者仅在布局文件中的先后位置不一样,虽然显示的顺序一样,但是情形四种的Button3超出了屏幕范围

3. 其他更复杂的情况就不介绍了

4. 综上,如果设置了控件的layout_weight属性,建议遵循google的建议,设置相应的layout_width或者layout_height属性值为0px

Android LinearLayout布局的layout_weight属性探究

标签:

原文地址:http://blog.csdn.net/mzbonnt/article/details/51428651

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!