weight属性你用的真的6嘛?

  相信大家在日常开发中一定使用过weight这个属性,它的作用一个是权重,另一个就是渲染优先级,但是你真的能很6的使用它嘛?如果不是,那么请继续往下看!!!

  我们知道,当weight起到不同作用的时候,weight属性的值可以影响控件的效果。但是具体的影响是怎么样的哪?

  当起权重作用的时候,weight属性值越大,占据的空间越大。(要求weight属性必须和0dp一起使用)

  当起渲染优先级作用的时候,weight属性值越大,越后渲染。

  其实,所谓占据空间大小是根据下面这个公式算出来的:

    实际宽(高)度 = 原来宽(高)度 + 剩余空间 * weight所占比重

    注意:不写weight属性的时候,默认weight属性值为0,并且只有Linearlayout本身及其子控件才能使用这个属性。

  那么下面就让我根据实际的例子,带大家熟悉一下我们这个公式可爱的地方??。

1  权重

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="weight=2"/>

</LinearLayout>

    效果图:  

       

    公式计算:

      btn1: 0 + (L - 0 - 0) * 1/3 = 1/3 L

      btn2: 0 + (L - 0 - 0)  * 2/3 = 2/3L

    结论:此时weight的作用是权重,weight属性值越大,占据的空间越大

2  渲染优先级

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="weight=2"/>

    </LinearLayout>

  效果图:

    

  公式计算:

    btn1:L  + (L - 2L) * 1/3 = L - 1/3L = 2/3L

     btn2:L  + (L - 2L) * 2/3 = L - 1/3L = 1/3L

  结论:此时weight的作用是渲染优先级,weight属性值越大,越后渲染。(这里可能对越后渲染这个概念解析的不到位,具体请看最后一个例子)

  那么怎么区别这两个作用那?当weight属性和宽或高(具体取决于你想使用权重的方向)属性值为0dp使用的时候,weight起到的就是权重的作用。否则就是渲染优先级的作用。上面是weight属性两个最常见的使用方法,难道了解这些就可以了嘛?当然不是,下面给大家列举一下weight的其它几种用法,目的在于让大家更加深入的理解上面那个可爱的公式。

1  weight和wrap_content、wrap_content一起使用

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="weight=2"/>

    </LinearLayout>

    效果图:

      

    公式计算:

      btn1:wr1 + ( L - wr1 - wr2) * 1/3

      btn2:wr2 + ( L - wr1 - wr2) * 2/3

2  weight和wrap_content、match_parent一起使用

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="weight=2"/>

    </LinearLayout>

    效果图:

      

    计算公式:

      btn1:wr1 + (L - wr1 - L) * 1/3 = 2/3wr1

       btn2:L + (L - wr1 - L) * 2/3 = L - 2/3wr1

3  weight和wrap_content、0dp一起使用

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:text="weight=2"/>

</LinearLayout>

    效果图:

      

    计算公式:

      btn1:0 + (L - 0 - wr2) * 1/3

      btn2:wr2 + (L - 0 - wr2) * 2/3

4  weight和match_parent、0dp一起使用

  <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="weight=1"/>

        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:gravity="center_horizontal"
            android:text="weight=2"/>

</LinearLayout>

    效果图:btn2超出屏幕一部分

    

    计算公式:

        btn1:0 + (L - 0 - L) * 1/3 = 0     近似等于包裹内容(此处我也想不太明白,欢迎指正!!!)

      btn2:L + (L - 0 - L) * 2/3 = L

    结论:这个例子很好的说明了weight渲染优先级的作用,weight属性值越大,越后渲染,因为如果把上面btn1和btn2的代码换个位置效果图是这样的:

    ,我们看到btn1超出屏幕渲染,当然也有可能是btn1和btn2的父布局设置为水平导致的,具体说明原因我也不是很清楚,欢迎指正!!!

    在LinearLayout中还有一个weightSum属性,顾名思义,就是指定总权重的,还记得上面各个效果图的计算公式1/3、2/3嘛?这里面的分母是我们1+2得到的,但是当你使用weightSum这个属性的时候,那么此时的分母值就是weightSum的属性值。That‘s All !!!,有关weight的使用方法到此就结束了,这个本人的第一篇博客,说是博客也好,说是笔记也好,总之如果对你们有用,就欢迎阅读、欢迎指正。

时间: 2024-09-29 19:27:55

weight属性你用的真的6嘛?的相关文章

从源码切入 透彻理解Android的weight属性

最近在看一本古董书<50 Android Hacks>,而书中开篇的第一个Hack就是"使用weight属性实现视图的居中现实". 事实上weight是一个使用简单,但却又十分强大的属性.但关于其的实现原理和使用细节我们却不一定真正深入的进行过理解. 今天我们就来由浅入深,从源码中去好好的研究研究这个东西.看看它有哪些可能被我们忽视的地方. 以上述书中的案例来说,它的需求很简单,请实现"让一个按钮居中显示,且占据屏幕一半的宽度". 要实现这个需求也许有很

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

本文地址:http://www.cnblogs.com/wuyudong/p/5898403.html,转载请注明源地址. 如果要实现如下图所示的将按钮居中显示,并且占据父视图的一半,无论屏幕是否旋转 合用weightSum属性和layout_weight属性 不同Android设备的尺寸往往是不同的.作为开发者,我们需要创建适用于不同尺寸屏幕的XML文件.硬编码是不可取的,因此需要其他方法来组织视图. 本文分析如何合用layout_weight和weightSum这两个属性来填充布局内部的任意

android weight 属性正解(转载)

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

【Android 开发笔记】weight属性

混合使用weightSum和layout_weight 先看效果,button占据屏幕宽度的一半. 再看开发文档中的描述. "定义weight总和的最大值.如果未指定该值,以所有子视图的layout_weight属性的累加值作为总和的最大值.一个典型的案例是:通过指定子视图的layout_weight属性为0.5,并设置LinearLayout的weightSum属性为1.0,实现子视图占据可用宽度的50." XML文件的源码. <LinearLayout xmlns:andro

android gravity属性 和 weight属性

来看这个布局文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5

LinearLayout的weight属性的解释

刚刚在stackoverflow上看到一个关于android LinearLayout的weight属性的解释,觉得解释很透彻,帖过来和大家分享一下. In a nutshell, layout_weight specifies how much of the extra space in the layout to be allocated to the View. LinearLayout supports assigning a weight to individual children.

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

面试时,一位面试官问到:"如果我想讲按钮居中显示,并且占据其父视图宽度的一半,应该怎么做到呢?"即实现这种效果: 我们使用weightSum属性和layout_weight属性实现这一要求: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

关于weight属性使用的一些细节

之前被这个属性困扰过好久,今天一个偶然的机会,终于把这个搞清楚了,现在与大家分享一下. 假设我们要在一个LinearLayout布局中显示两个按钮,button1和button2,button2的宽度是button1的二倍,正常情况下使用weight应该是这样的: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

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

从今天開始,把看书时候的知识点整理成博客, 这个比較简单,预计有经验的都用过,weight属性 在做Android布局的时候,常常遇到须要几个控件按比例分配空间的情况 比方下图效果 在底部设置两个button,占领底部宽度一部分的同一时候,保持1:3的比例, 当然了,这么难看的布局用处不大,仅是用来说明weight的使用方法 布局代码例如以下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q