Android 布局之layout_weight解析

Android 布局之layout_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">

    <TextView
        android:layout_weight="1"
        android:layout_width="0dp"
        android:gravity="center"
        android:background="#ff6666"
        android:layout_height="50dp"
        android:text="Hello World!" />
    <TextView
        android:layout_weight="1"
        android:layout_width="0dp"
        android:gravity="center"
        android:layout_height="50dp"
        android:background="#448790"
        />
    <TextView
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:background="#ff00ff"
        />
</LinearLayout>

如上代码所示,通常我们会用LinearLayout来包住这三个TextView,然后把每个TextView的layout_weight属性和layout_width属性分别设为”1”和”0dp”,来实现下图这种平分的效果:

如果我们想以1:2:3的比例进行展示呢?那我们对代码稍作修改:

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

    <TextView
        android:layout_weight="1"
        android:layout_width="0dp"
        android:gravity="center"
        android:background="#ff6666"
        android:layout_height="50dp"
        android:text="Hello World! Hello World!" />
    <TextView
        android:layout_weight="2"
        android:layout_width="0dp"
        android:gravity="center"
        android:layout_height="50dp"
        android:background="#448790"
        android:text="1"
        />
    <TextView
        android:layout_weight="3"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="2"
        android:background="#ff00ff"
        />
</LinearLayout>

不就把layout_weight分别改为1、2、3嘛,so easy, 然而并卵,看结果:

你会发现如果第一个TextView的文案一行还好,一旦超过一行就会显示得有点诡异了,这尼玛是什么情况呢?其实呢,是因为这个LinearLayout它有个基准线,你会发现文本的第一行都是在同一水平线上的,怎么处理这个问题呢?

LinearLayout有个这个属性baselineAligned属性,把它设为false就可以了。

android:baselineAligned="false"

看结果:

再稍微修改下代码, 把第一个TextView的layout_width设为wrap_content:

<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:baselineAligned="false"
    android:orientation="horizontal">

    <TextView
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:gravity="center"
        android:background="#ff6666"
        android:layout_height="50dp"
        android:text="Hfasdlsdhslskdj" />
    <TextView
        android:layout_weight="2"
        android:layout_width="0dp"
        android:gravity="center"
        android:layout_height="50dp"
        android:background="#448790"
        android:text="1"
        />
    <TextView
        android:layout_weight="3"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:gravity="center"
        android:text="2"
        android:background="#ff00ff"
        />
</LinearLayout>

看结果:

发现他会优先把宽度给第一个TextView,然后剩余的宽度再去安比例分配,也就是第二个TextView占剩余宽度的2/5,第三个TextView占剩余宽度的3/5.当然r如果你把第一个TextView的宽度设为100dp,父布局也是把宽度分100dp给第一个TextView,然后剩余空间再安比例分。也就它父布局会先把减去每个子view的宽度之和,然后剩余的再去按比例分配。

不知道大家有没有去思考一个问题,android:layout_width、android:layout_height、android:layout_gravity、android:gravity、android:width、android:height等属性有什么区别呢?其实前面加layout的属性都是由父布局决定的,也就是相当于向父布局申请我要多少宽度,高度,位置要在你的哪边;而不带layout的属性是决定内容宽度、高度、位置。

对于LinearLayout,还有个android:weightSum属性,他是用来指定总权重的,如果子view的权重超过总权重就会超出屏幕。有些时候,子 view设置了权重,但是有个别子 view显示不完整,就可以通过设置这个属性来解决。因为有时候过快的layout会导致父布局来不及计算,所以先给父布局预先设置好总权重就可以避免这种情况。

时间: 2024-10-09 09:08:32

Android 布局之layout_weight解析的相关文章

[Android]布局之layout_weight

在网上看了一些对Layout_weight的讲解,有些说的比较片面,只列举了一种情况,然后自己通过实验和一些比较好的文章总结了一下,特此记录下来,以备以后所用.Layout_weight是线性布局,也就是LinearLayout里面用到的,下面通过实验来看这个Layout_weight的特性. 1.当控件的属性android:layout_width="fill_parent"或者"match_parent"时,布局文件如下: Xml代码 <?xml vers

安卓开发技巧一:深入理解Android布局中Layout_weight的属性

今天开始将要为大家介绍一些安卓开发过程将要用到的一些技巧,这些技巧全部来自网络搜集,或者自己在企业做项目的时候总结出来的,利用这些技巧将会对我们开发带来非常方便的便捷性. 先来记录一下这一段时间的技巧目录,方便大家以后方便查阅(大概有不到三十种的技巧总结,大概每周分享两个技巧,笔者将尽可能写的详细,以及提供实例源码): 安卓开发技巧一:深入理解Android布局中Layout_weight的属性 安卓开发技巧二:自定义日志工具类 安卓开发技巧三:Activity的启动模式 安卓开发技巧四:分享一

android 布局中 layout_gravity、gravity、orientation、layout_weight

线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是本元素所有子元素的重力方向) android:orientation (线性布局以列或行来显示内部子元素) android:layout_weight (线性布局内子元素对未占用空间[水平或垂直]分配权重值,其值越小,权重越大. 前提是子元素 设置了 android:layout_width = "

android 布局中 layout_gravity、gravity、orientation、layout_weight【转】

线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity  ( 是本元素相对于父元素的重力方向 ) android:gravity        (是本元素所有子元素的重力方向) android:orientation    (线性布局以列或行来显示内部子元素) android:layout_weight  (线性布局内子元素对未占用空间[水平或垂直]分配权重值,其值越小,权重越大. 前提是子元素 设置了 android:layo

Android LinearLayout布局的layout_weight属性探究

Android布局文件中的layout_weight属性仅在LinearLayout布局中有效. google推荐:当设置了控件的layout_weight属性时,该控件相应的layout_width或者layout_height属性应该设置为0dp. 如果设置了控件的layout_weight属性同时,又设置了layout_width或者layout_height属性,此时有多种情况需要分析,(可能某些控件设置了layout_weight属性,某些没有设置,设置了layout_weight属性

Android:LinearLayout布局中Layout_weight的深刻理解

首先看一下LinearLayout布局中Layout_weight属性的作用:它是用来分配属于空间的一个属性,你可以设置他的权重.很多人不知道剩余空间是个什么概念,下面我先来说说剩余空间. 看下面代码: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" an

Android布局文件经验

1.父控件中含有多个子控件时,往往遵循长子优先的原则,即长子如果很大可能占满父空间,使次子们出局: 2.假设TableLayout有2行,其中一行未设定列间长度比例,而另一行设定了,则未设定行可能也会遵循设定行的列间长度比例: 3.在某个区域(如TableLayout中某个单元格)显示某张超大的图片,希望图片总是自适应单元格而不是把单元格撑爆.解决方案:将单元格放在LinearLayout中,给LinearLayout设置android:layout_width="wrap_content&qu

android 布局属性大全---初学者必备

Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,花费本人一个下午搞出来的,希望对其他人有用. 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 and

Android成长日记-Android布局优化

Android常用布局 1. LinearLayout(线性布局) 2. RelativeLayout(相对布局) 3. TableLayout(表格布局) 4. AbsoluteLayou(绝对布局) 5. FrameLayout(帧布局) 低--------------使用量------------------à高 4->3->5->1->2 Android布局原则 (1) 尽量多使用LinearLayout和RelativeLayout,不要使用AbsoluteLayout