LinearLayout 在androidUI布局中使用非常多,它其中有个很方便又很有意思的属性 weight

,这个属性理解起来不是那么简单的,而真正理解了又觉得非常简单!

下面就通过一个例子来说明.

weight代表的含义--- android:layout_width

布局代码是:

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

<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="wrap_content"

android:layout_weight="5"

android:text="button2" />

</LinearLayout>

分析:

  当android:layout_width="match_parent"的时候,如果设置了weight属性,那么根据它的weight值(可以理解为优先级)来占据空间,而且这个值是越小,占的空间越大,因此此时可以理解为优先级.

比如:按钮1和按钮2的width属性都是match_parent,如果按钮1的weight= 1 按钮2的为weight = 2  那么按照优先级 按钮1先占据,按钮2后占据. 大小比例为 

按钮1 = 2/(1+2) ,按钮2 = 1/(1+2) 如下第一幅图

如果按钮1的weight我们设置为1000,按钮2的weight设置为1 那么 按钮2 几乎全部占据了所有空间!如下图第二幅

weight代表的含义--- android:layout_width

  1.  

    注意!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" >

    <Button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_weight="1"

    android:text="button1" />

    <Button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_weight="1000"

    android:text="button2" />

    </LinearLayout>

 

当 android:layout_width="wrap_content"的时候,我们发现即使我们将按钮2设置成: android:layout_weight="1000"  按钮2不但没有像第一种情况下那样消失,反而占据了更多的空间,这是怎么回事儿呢?

分析: 主要的变化来自于我们设置了android:layout_width="wrap_content",也就是说一个控件在宽度上只会包裹它的内容. 如果设置上了权重,意思告诉该控件,要根据weight来尽可能的包裹内容,weight值越小,包裹越小.值越大,包裹越大. 但是再小,控件都要能包裹内容. 因此,不会像第一种情况那样消失!

正确使用weight 属性!

  1.  

    下面是来自SDK的一句话:

    In order to improve the layout efficiency when you specify the weight, you should change the width of theEditText to be zero (0dp). Setting the width to zero improves layout performance because using "wrap_content"as the width requires the system to calculate a width that is ultimately irrelevant because the weight value requires another width calculation to fill the remaining space.

    它的大致意思就是说: 我们如果在某个方向上使用了weight ,那么我们必须在对应的方向上将width设置为0dp. 它告诉了我们设置为0dp是因为使用weight,系统是采用了另外一套计算占用空间大小的算法的.(the weight value requires another width calculation to fill the remaining space.)

  2. 2

    总结: 要正确使用weight,不要再去纠结 

    android:layout_width="match_parent"

    android:layout_width="wrap_content" 两种情况下该如何设置weight. 因为这样设置根本就是错误的用法.

    正确的用法是:

    先设置 android:layout_width="0dp" 或者 android:layout_height="0dp"

    然后再去调配权重

    而此时的weight也非常好理解: weight就是比重!比例!请看下图

Android——android weight 属性(百度)的更多相关文章

  1. Android Hack1 使用weight属性实现视图的居中显示

    本文地址:http://www.cnblogs.com/wuyudong/p/5898403.html,转载请注明源地址. 如果要实现如下图所示的将按钮居中显示,并且占据父视图的一半,无论屏幕是否旋转 ...

  2. Android weight属性详解

    android:layout_weight是一个经常会用到的属性,它只在LinearLayout中生效,下面我们就来看一下: 当我们把组件宽度设置都为”match_parent”时: <Butt ...

  3. android gravity属性 和 weight属性

    来看这个布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  4. 【转】android gravity属性 和 weight属性

    有点忘记这两个属性了,复习一下. 来看这个布局文件 <?xml version="1.0" encoding="utf-8"?> <Linea ...

  5. Android开发技巧一--weight属性实现视图的居中(半)显示

    面试时,一位面试官问到:“如果我想讲按钮居中显示,并且占据其父视图宽度的一半,应该怎么做到呢?”即实现这种效果: 我们使用weightSum属性和layout_weight属性实现这一要求: < ...

  6. Android之使用weight属性实现控件的按比例分配空间

    从今天開始,把看书时候的知识点整理成博客, 这个比較简单,预计有经验的都用过,weight属性 在做Android布局的时候,常常遇到须要几个控件按比例分配空间的情况 比方下图效果 在底部设置两个bu ...

  7. android: android 布局中的weight 属性

    android: weight是线性布局的特有属性,控件的宽度和高度的不同,也会存在差异. 示例1:将宽度设置为包裹类型wrap_content或0dp <?xml version=" ...

  8. Android控件属性大全(转)

    http://blog.csdn.net/pku_android/article/details/7365685 LinearLayout         线性布局        子元素任意: Tab ...

  9. Android:weight,margin,padding详解实例

    weight详解 weight是用来等比例划分区域的属性. 案例代码 <LinearLayout xmlns:android="http://schemas.android.com/a ...

随机推荐

  1. 论#include

    1.#include " "与#include <> #include " "表示预编译命令源程序在当前项目下寻找头文件,如果找不到,再到标准头文件 ...

  2. Binwalk:后门(固件)分析利器

    http://blog.csdn.net/testing_is_believing/article/details/14091179 Binwalk介绍 Binwalk是一个固件的分析工具,旨在协助研 ...

  3. POJ1035

    #include <iostream> #include <cstdio> #include <cstring> #include <vector> # ...

  4. function.length和arguments的区别

    function.length:接收到函数体外的参数计算长度 arguments:接收到函数体内的参数计算长度 /** * 函数参数长度和伪数组(arguments)长度不一样! -> 接收到函 ...

  5. 转:【微信小程序】实现锚点定位楼层跳跃的实例

    微信小程序实现楼层锚点跳跃,点击不同的锚点进行位置跳跃:  利用:scroll-into-view 来实现: 效果图:   wxml: <scroll-view class="cont ...

  6. PHP-汇总CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI

    什么是CGI 1.CGI是HTTP协议与其他外部应用程序之间的一个接口标准 2.CGI程序或脚本(CGI程序通过HTTP服务器去执行时, 必须在CGI程序中制定其执行程序的完整路径, 使SHELL能找 ...

  7. Linux命令-目录处理命令:cp

    cp /etc/grub.conf /tmp 复制一个文件 cp -r /tmp/beijing/dongchengqu /root 复制dongchengqu目录到root目录 cp /root/i ...

  8. TocControl控件图层无法显示问题

    在窗口里的层层嵌套SplitContainer后,出现最内层SplitContainer内部TocControl控件图层无法显示问题:加载完mxd后代后加上axTOCControl1.SetBuddy ...

  9. 简单的并发测试工具 ab.exe ab.zip可下载 -摘自网络

    ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便    下载地址:http://files.cnblogs.com/files/gossip/ab.zip   ...

  10. GNU C编译器的gnu11和c11

    国际标准组织发布c11后,gnu为自己的编译器发布两种标准gnu11和c11 gnu11:带gnu c扩展的c11标准,如果你的代码包含了typeof,__attribute__等等gnu的扩展,就必 ...