android weight 属性正解(转载)

  LinearLayout 在androidUI布局中使用非常多,它其中有个很方便又很有意思的属性 weight ,这个属性理解起来不是那么简单的,而真正理解了又觉得非常简单!

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

  布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="horizontal" >
 6     <Button
 7         android:layout_width="match_parent"
 8         android:layout_height="wrap_content"
 9         android:layout_weight="1"
10         android:text="button1" />
11     <Button
12         android:layout_width="match_parent"
13         android:layout_height="wrap_content"
14         android:layout_weight="5"
15         android:text="button2" />
16 </LinearLayout>

  

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

  注意!以下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值越小,包裹越小.值越大,包裹越大. 但是再小,控件都要能包裹内容. 因此,不会像第一种情况那样消失!

 

  下面是来自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.)

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

    android:layout_width="match_parent"

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

  正确的用法是:

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

然后再去调配权重

而此时的weight也非常好理解: weight就是比重!

时间: 2024-10-05 18:48:44

android weight 属性正解(转载)的相关文章

HTML中META属性详解 转载自 hero_213的博客

HTML中META属性详解 meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <head> <meta   http-equiv= "content-Type "   content= "text/html;   charset=gb2312 "> </head>         也许你认为这些代码可有可无.其实如果你能够用好meta标签,会给你带来意想不到的效果,例如加

Android android:windowSoftInputMode属性详解

Activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: 1.当有焦点产生时,软键盘是隐藏还是显示 2.是否减少活动主窗口大小以便腾出空间放软键盘 它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合.在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果.各个值之间用|分开. 例如:<activity android:windowSoftIn

Android——android weight 属性(百度)

LinearLayout 在androidUI布局中使用非常多,它其中有个很方便又很有意思的属性 weight ,这个属性理解起来不是那么简单的,而真正理解了又觉得非常简单! 下面就通过一个例子来说明. weight代表的含义--- android:layout_width 布局代码是: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://s

【转】android布局属性详解

LinearLayout布局: 线性版面配置,在这个标签中,所有元件都是按由上到下的排队排成的.在这个界面中,我们应用了一个 LinearLayout的布局,它是垂直向下扩展的 ,所以创建的布局XML文件,以<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="

android布局属性详解

第一类:属性值为true或false android:layout_centerHrizontal  水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent    相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft   贴紧父元素的左边缘 android:layout_alignParentRig

Android布局属性详解剖析

View的布局显示方式有下面几种: 线性布局(LinearLayout) 相对布局(RelativeLayout) 表格布局(TableLayout) 网格视图(GridView) 标签布局(TabLayout) 列表视图(ListView) 绝对布局(AbsoluteLayout) 本文主要详细讲述一些参值. RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal   水平居中 android:la

android:exported 属性详解

昨天在用360扫描应用漏洞时,扫描结果,出来一个android:exported属性,其实之前根本不知道这个属性,更不知道这个属性用来干嘛的,详情见下图: 因此,查了官方API,学习了一下这个属性! android:exported 是Android中的四大组件 Activity,Service,Provider,Receiver 四大组件中都会有的一个属性. 总体来说它的主要作用是:是否支持其它应用调用当前组件. 默认值:如果包含有intent-filter 默认值为false; 没有inte

android TextView属性详解

RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false     android:layout_centerHrizontal  水平居中      android:layout_centerVertical   垂直居中     android:layout_centerInparent    相对于父元素完全居中     android:layout_alignParentBottom 贴紧父元素的下边缘     android:layout_alignPar

Android开发之 android:windowSoftInputMode属性详解

android:windowSoftInputMode activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性. 这个属性能影响两件事情: [一]当有焦点产生时,软键盘是隐藏还是显示 [二]是否减少活动主窗口大小以便腾出空间放软键盘 它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合.在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果.各个值之间用|分开.例如:<