一直没理解在LinearLayout中的layout_weight属性的意义,使用的时候都是将子控件的layout_width或者layout_height设置为0,然后在设置layout_weight的权重值,以至于在被问到如果设置了layout_width为具体的值时对layout_weight的影响时一脸懵逼。然后看到了这篇文章,终于豁然开朗。

原来layout_weight属性的意义就是将父控件的剩余空间按照设置的权重比例再分配,也就是在布局的时候,系统先按照view的layout_width和layout_height来布局,然后再根据layout_weight对view的位置进行调整。

贴下原文内容:

指示LinearLayout中多少额外空间分配给与这些LayoutParams关联的视图。 如果视图不应被拉伸,请指定0。 否则,额外空间将在权重大于0的所有视图中按比例分配。

上面有几点:

1.额外空间,指的是剩余空闲空间, 额外空间将在权重大于0的所有视图中按比例分配。

如下,总权重为1+1=2

第一个控件是比第二个控件占的空间小的,即w(12345)+1/2空闲空间< w(123456)+1/2控件

<LinearLayout 
  android:orientation="horizontal">
  <TextView 
      android:layout_width="wrap_content"
      android:layout_height="wrap_height"
      android:layout_weight="1"
      android:text="12345"/>
 
  <TextView 
      android:layout_width="wrap_content"
      android:layout_height="wrap_height"
      android:layout_weight="1"
      android:text="123456"/>
</LinearLayout>
如果我们让控件的宽度定义为layout_width="0dp" ,这样比如2个控件的 layout_weight="1" 就可以各自50%平分整个空间了,因为:0 + 1/2空闲空间 = 0 + 1/2空闲空间。

2.默认layout_weight为0,所以如果这么写:

<LinearLayout 
    android:orientation="horizontal">
 
    <TextView
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:background="#000" />
 
    <Button
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
 
    <TextView
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:background="#888" />
 
</LinearLayout>
则总权重为1,即Button占了所有剩余空闲空间,无论它在哪个位置

3.在排列方向上设置了match_parent, 如下,权重为2,1,2

<LinearLayout
        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:text="1"
            android:layout_weight="2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2"
            android:layout_weight="1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="3"
            android:layout_weight="2"/>
运行结果如下:

分析:因为设置的都是match_parent,所以如果没有设置权重,三个Button只会显示第一个,其他会被覆盖,但是设置了权重后, 我们就按三个Button给定的width=match_parent计算剩余空间

剩余空间=1个match_parent空间-3个match_parent空间= -2个match_parent空间(负2)

所以

Button1所占空间 = 1个match_parent空间+(-2个match_parent空间)*2/5 = 1/5个match_parent空间

Button2所占空间 = 1个match_parent空间+(-2个match_parent空间)*1/5 = 3/5个match_parent空间

Button3所占空间 = 1个match_parent空间+(-2个match_parent空间)*2/5 = 1/5个match_parent空间

所以在统一设置match_parent时,会有这么一个特性,权重越大,空间越小。

而且在某个控件权重刚好为另外的所有控件权重之和时,这个控件会消失。

如权重变为1,2,3

<LinearLayout
        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:text="1"
            android:layout_weight="1"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="2"
            android:layout_weight="2"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="3"
            android:layout_weight="3"/>
运行结果如下:

同样的算法:

Button1所占空间 = 1个match_parent空间+(-2个match_parent空间)*1/6 = 2/3个match_parent空间

Button2所占空间 = 1个match_parent空间+(-2个match_parent空间)*2/6 = 1/3个match_parent空间

Button3所占空间 = 1个match_parent空间+(-2个match_parent空间)*3/6 = 0个match_parent空间

剩余布局大小 = 父布局大小 - 子布局大小之和

layout_weight属性的用法和意义相关推荐

  1. Android LinearLayout的android:layout_weight属性

    本文主要介绍Android LinearLayout的android:layout_weight属性意义 android:layout_weight为大小权重,相当于在页面上显示的百分比,它的计算是根 ...

  2. Java培训分享void的用法和意义

    本文由小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...

  3. Java技术分享:void的用法和意义

    本文小千分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查询结果,如下: ...

  4. Android知识点剖析系列:深入了解layout_weight属性

    摘录自:http://www.cnblogs.com/net168/p/4227144.html 前言 Android中layout_weight这个属性对于经常捣鼓UI的我们来说,肯定不会陌生.但是 ...

  5. android layout_width 属性,android:layout_weight属性详解

    在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...

  6. Android 对Layout_weight属性完全解析以及使用ListView来实现表格

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/13630837 今天主要说的是对Layout_weight属性的完全解析,以及利用Lay ...

  7. java里void的意思_void的用法和意义

    本文由好程序员ava培训分享void的用法和意义,void在Java中一般用来表示方法没有返回值.例如: 那么其底层原理到底如何呢?我们来一点点的分析一下. 先来了解一下这个单词的基本含义,根据网络查 ...

  8. 线性布局html,线性布局中的layout_weight属性

    layout_weight属性是线性布局的特有属性,当需要去按比例分配某一行或某一列上的控件时,通常会想到使用权重这个属性去解决,一般在使用该属性时,要把控件的layout_width或layout_ ...

  9. React创建组件的方法,组件的props属性、state属性的用法和特点,父子组件传值,兄弟组件传值

    创建组件的方法,组件的props属性.state属性的用法和特点,父子组件传值,兄弟组件传值 1.react组件 1.1.创建组件的方法 1.1.1.函数组件 定义一个组件最简单的方式是使用JavaS ...

最新文章

  1. PHP定时执行任务的实现
  2. GridBagLayout布局管理器应用详解
  3. python while-Python天坑系列(一):while 1比while True更快?
  4. 前端学习(3135):react-hello-react之函数的柯里化
  5. Struts2学习总结(完整版)
  6. java中String相等问题
  7. Win10+Python3.6配置Spark创建分布式爬虫
  8. 面试机器学习、数据挖掘、大数据岗位时遇到的各种问题
  9. mysql1040_解决mysql 1040错误Too many connections的方法
  10. 微信昵称emoj表情保存到mysql数据库时报错怎么解决?
  11. java集合框架介绍_Java集合框架全面介绍(一)
  12. 除了微软默认的ppt服务器外,微软如此解释这一新政。据了解,除了MSN与Skype有很多类似功能之外.ppt...
  13. 一些鼠标指针图案大全和美化 20+
  14. ECharts百度图表
  15. linux安装google浏览器
  16. 基于Android的校园图书共享app
  17. 在机器学习领域,主要的学习方式是哪几种?
  18. vlan的基本指令_思科VLAN的基本配置命令
  19. 基于微信小程序的选课系统的设计与实现源码
  20. qt android png透明,Qt处理照片实现白色背景转透明

热门文章

  1. 厨电行业不需要“愚蠢的小聪明创新”
  2. 什么耳机长时间戴比较舒服,推荐五款开放式耳机
  3. Android Instrumented Unit Tests (AndroidTests)
  4. 小黄车服务器不响应,ofo服务器突然宕机 上午库克刚骑过小黄车
  5. window 7喇叭有红叉,耳机扬声器已拔出驱动无法修复
  6. 【作为测试这些MySQL知识必备】。书写万字手把手教你MySQL,从建库开始步步教学,也可直接复制粘贴使用
  7. 人工智能、机器学习、机器人之间有什么区别和联系?(楚才国科)
  8. ckeditor上传图片示例
  9. 每天一点数据库之-----Day 2 创建与管理数据库表
  10. 数据结构与算法基础--王卓