`
renyuan_1991
  • 浏览: 70587 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

线性布局的权重weight使用详解

阅读更多
对线性布局中权重的理解
转载请注明出处:http://renyuan-1991.iteye.com/blog/2272200
今天突然想到自己对线性布局的理解,便想再此记录下来。写这篇博客之前特意看了很多别人写的线性布局的权重理解发现只有一篇是正确的,其余都是按“包裹内容时权重越大比例越大,匹配父窗体时权重越大比例越小”,或者反比正比的什么规律。这样的理解是不对的,对于自己写动态布局会产生很大的困扰,如果按这样的理解,下面的情况就无法解释了。
<LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="50dp"
        android:layout_height="50dp">
        <TextView
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:background="@color/blue"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="2"
            android:layout_width="match_parent"
            android:background="@color/red"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="3"
            android:background="@color/yellow"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

按照上面的说法这段代码显示的样式应该是3:2:1,可实际的情况是下图中的第二个线性布局

上面代码显示的布局中黄色的textview根本没有显示,所以“包裹内容时权重越大比例越大,匹配父窗体时权重越大比例越小”这种说法是不正确的。控件最终宽度 = 控件初始宽度+((屏幕宽度-控件宽度和)/(所有weight之和))*这里是水平方向的所以用宽度举例,竖直方向同理。
接下来我们看一下上图中对应的代码
<LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="50dp"
        android:layout_height="50dp">
        <TextView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:background="@color/blue"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="2"
            android:layout_width="0dp"
            android:background="@color/red"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="3"
            android:background="@color/yellow"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="50dp"
        android:layout_height="50dp">
        <TextView
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:background="@color/blue"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="2"
            android:layout_width="match_parent"
            android:background="@color/red"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="3"
            android:background="@color/yellow"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_marginTop="50dp"
        android:layout_height="50dp">
        <TextView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:background="@color/blue"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="1"
            android:layout_width="0dp"
            android:background="@color/red"
            android:layout_height="match_parent" />
        <TextView
            android:layout_weight="1"
            android:background="@color/yellow"
            android:layout_width="100dp"
            android:layout_height="match_parent" />
    </LinearLayout>

第一段代码:控件宽度之和是0dp,所以屏幕剩余量是1个屏幕宽度。weight之和是6。先把屏幕剩余量分6份,第一个textview占一份第二个TextView占两份第三个TextView占三份。最后它们显示的宽度就是0+1/6,0+2/6,0+3/6。
第二段代码:控件宽度之和是3个屏幕宽度,所以屏幕剩余量是-2个屏幕宽度。weight之和是6。先把屏幕剩余量分6份,第一个textview占一份第二个TextView占两份第三个TextView占三份。最后它们显示的宽度就是1+(1/6)*(-2),1+(2/6)*(-2),1+(3/6)*(-2)。所以第一个TextView和第二个TextView已经占满了屏幕第三个TextView自然就显示不出来了
第三段代码:控件宽度之和是100dp,所以屏幕剩余量是1个屏幕宽度减去100dp。weight之和是6。先把屏幕剩余量分6份,第一个textview占一份第二个TextView占两份第三个TextView占三份。最后它们显示的宽度就是0+(1/6)*剩余量,0+(2/6)*剩余量,100+(3/6)*剩余量
ok,到这儿就结束了....


希望爱好编程的小伙伴能加这个群,互相帮助,共同学习。群号: 141877583

  • 大小: 27.2 KB
1
0
分享到:
评论

相关推荐

    android的线性布局

    本篇文章将深入探讨线性布局的使用方法、属性以及如何在实际应用中灵活运用。 线性布局的工作原理: 线性布局按照设定的`orientation`属性,将子视图沿着一条直线进行堆叠。默认情况下,`orientation`值为`vertical...

    Android移动应用开发线性布局LinearLayout的weight属性简介.pdf

    《Android移动应用开发线性布局LinearLayout的weight属性详解》 在Android移动应用开发中,界面设计是一项关键任务,尤其在多样化的设备分辨率环境下,保证布局的适应性和灵活性至关重要。LinearLayout作为常用的...

    android线性布局详解.doc

    `android:layout_weight`参数是线性布局的一个关键特性,用于在剩余空间中分配子视图的大小。当设置`android:layout_weight`时,需要同时设置`android:layout_width`或`android:layout_height`为`"fill_parent"`,...

    Android开发学习23】界面布局之线性布局LinearLayout代码

    本篇文章将深入探讨线性布局(LinearLayout)的使用方法、特性以及如何通过代码实现。 线性布局(LinearLayout)是Android中最常见的布局方式,它按照垂直或水平方向排列其子视图(Views)。线性布局允许开发者设置...

    Android UI组件LinearLayout线性布局详解

    【线性布局LinearLayout详解】 线性布局LinearLayout是Android开发中常用的一种布局方式,它遵循一个单一的行或列的方向来组织子视图。LinearLayout的主要特点在于它的简单性和灵活性,可以根据需求进行水平或垂直...

    Android四大布局详解

    线性布局支持权重分配,允许子视图按比例占据剩余空间,这在创建响应式设计时非常有用。例如,`android:layout_weight`属性可以帮助我们创建等宽或等高的子视图。 2. **RelativeLayout**:相对布局允许子视图相对于...

    Android六大布局详解

    以上代码展示了如何使用线性布局来实现一个简单的布局结构,其中包括了一个顶部的`RelativeLayout`和一个包含三个部分的横向`LinearLayout`。通过设置`android:layout_weight`属性,我们可以轻松地按照特定比例分配...

    android-五大布局&单位详解

    本文将深入探讨Android的五大布局——线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)以及约束布局(ConstraintLayout),并详细解析它们的工作原理和使用...

    Android_布局详解

    #### 二、LinearLayout(线性布局) **定义:** LinearLayout是最常用的布局之一,它按顺序将视图组件(如按钮、文本框等)放置在线性方向上,即水平或垂直方向。可以通过`android:orientation`属性设置其排列方式...

    android界面布局详解

    Android提供了多种布局类型,如LinearLayout(线性布局,水平或垂直排列)、RelativeLayout(相对布局,基于相对位置放置组件)、FrameLayout(帧布局,按顺序叠加组件)、TableLayout(表格布局)等。每种布局都有...

    android布局属性详解

    #### 五、LinearLayouts(线性布局) 1. **`android:layout_weight`**:该属性用于指定视图在LinearLayout中的权重分配。例如,在一个水平LinearLayout中,如果有两个TextView,第一个TextView的`android:layout_...

    Android布局之LinearLayout线性布局

    - 结合`android:layout_weight`,线性布局还可以实现灵活的界面设计,适应不同屏幕尺寸和设备方向。 - 虽然LinearLayout简单易用,但在复杂的布局需求中可能会显得力不从心,这时可以考虑使用`RelativeLayout`、`...

    LinearLayout的属性详解

    线性布局(LinearLayout)是Android开发中常用的布局方式之一,它允许我们将视图(View)按照垂直或水平的方向进行排列。在本篇文章中,我们将深入探讨LinearLayout的各种属性及其使用方法,帮助开发者更好地理解和...

    Android五大布局与实际应用详解

    线性布局(LinearLayout)是Android开发中最基础也是最常用的布局之一,它允许将子视图按照垂直或水平的方向排列。通过设置`android:orientation`属性,可以改变布局方向,值为`vertical`时子视图从上到下排列,值为...

    android UI界面设计

    下面通过两个示例代码来具体说明线性布局的使用方法: **实现水平布局** ```xml xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height=...

    Android 五大布局方式详解

    - `layout_weight`:分配给组件的权重,用于确定组件占据的相对空间,权重高的组件将占用更多空间。 示例代码展示了如何创建一个包含两个子线性布局的主线性布局,一个垂直排列,一个水平排列,其中水平布局的按钮...

    android部分控件详解

    本文将详细介绍Android中常见的几种布局——线性布局(LinearLayout)、表格布局(TableLayout)和相对布局(RelativeLayout)以及单选框(RadioGroup和RadioButton)和多选框(CheckBox)的使用方法和相关属性。...

    androidUI详解文档

    8. **控件适配(View Hierarchy)**:为了适应不同屏幕尺寸和密度,Android引入了布局权重(layout_weight)和百分比布局(PercentRelativeLayout/PercentFrameLayout)。此外,还可以使用可折叠布局...

Global site tag (gtag.js) - Google Analytics