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

之前被这个属性困扰过好久,今天一个偶然的机会,终于把这个搞清楚了,现在与大家分享一下。

假设我们要在一个LinearLayout布局中显示两个按钮,button1和button2,button2的宽度是button1的二倍,正常情况下使用weight应该是这样的:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

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

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

</LinearLayout>

注意两个button的宽都是0dp

效果图:

可是如果换一种方式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    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="2"
        android:text="button2" />

</LinearLayout>

两个button的宽度都是match_parent,情况立马发生转变:

我以前就在这里不知道纠结了多少回,那么我们到底该怎么理解weight这个属性呢?

设置了weight属性的View的宽度等于原有宽度加上剩余空间的占比,其中剩余空间是指屏幕宽度相对于控件总宽度剩余的空间大小。

以第一种情况为例



假设屏幕宽度为L,第一个button原有宽度是0dp,那么该button的宽度为0+(L-0)×1/3 = (1/3)L

其中(L-0)中,L表示屏幕宽度,0表示两个控件的总宽度



以第二种情况为例



假设屏幕宽度为L,因为两个都是match_parent,所以总宽度是2L,那么对于第一个button而言,它的宽度为:L+(L-2L)×1/3 = (2/3)L

其中(L-2L)中,L表示屏幕宽度,2L表示两个控件的总宽度



总结:建议大家在使用weight属性的过程中把相应的宽或者高设置为0dp,这也是Google推荐的做法。水平排列的话宽设置为0dp,竖直排列的话高设置为0dp.

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。

时间: 2024-10-02 12:01:48

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

从源码切入 透彻理解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属性你用的真的6嘛?

相信大家在日常开发中一定使用过weight这个属性,它的作用一个是权重,另一个就是渲染优先级,但是你真的能很6的使用它嘛?如果不是,那么请继续往下看!!! 我们知道,当weight起到不同作用的时候,weight属性的值可以影响控件的效果.但是具体的影响是怎么样的哪? 当起权重作用的时候,weight属性值越大,占据的空间越大.(要求weight属性必须和0dp一起使用) 当起渲染优先级作用的时候,weight属性值越大,越后渲染. 其实,所谓占据空间大小是根据下面这个公式算出来的: 实际宽(高

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

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