在日常的开发过程中,我们通常或多或少会使用到LinearLayout的weight属性来进行权重设置,进而达到按比例显示布局的意图

通常我们在使用时,会这样使用

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="2"

android:background="@android:color/holo_blue_light" />

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@android:color/holo_red_light" />

android:layout_width="0dp"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@android:color/holo_green_light" />

权重示例.png

我们一般使用weight属性时,会将width或者height设置为0dp,这时控件的宽或者高就会按照我们设置的权重,如上面的2:1:1来填充父控件

但是,如果子控件的宽度或高度不设置成0dp,那么他们的宽高是怎么分配的呢?

我们首先明确一点:weight权重是针对于LinearLayout的剩余空间,所以我们在设置该属性之后,LinearLayout会计算自己的剩余空间,然后将剩余空间按权重分配到子控件上。

以横向布局为例:

LinearLayout的剩余空间 = LinearLayout的宽度 - 各个子控件的宽度,可以有负值

以2个子控件为例,权重分别为2和1

那么

子控件1的宽度 = 子控件1的初始宽度 +(2/3)* LinearLayout的剩余空间

子控件2的宽度 = 子控件2的初始宽度 +(1/3)* LinearLayout的剩余空间

我们来验证一下:

为方便测量,使用px单位, 我们先设定父控件宽 = 800px, 子控件1 = 200px 子控件2 = 100px,weight都为1,我们自己先算一下,可以得出:

LinearLayout的剩余空间 = 800 - 200 - 100 = 500

子控件1宽度 = 200 + (1/2) * 500 = 450

子控件2宽度 = 100 + (1/2) * 500 = 350

看下效果是否和我们计算的一致:

android:layout_width="800px"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="300px"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@android:color/holo_blue_light" />

android:layout_width="100px"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@android:color/holo_red_light"

android:singleLine="true" />

权重示例1.png

和我们预期的一致

我们再检测下"match_parent"的情况:

设定父控件宽 = 600px, 子控件1 ="match_parent" weight = "1" 子控件2 = "match_parent" weight = "2",我们自己先算一下,可以得出:

LinearLayout的剩余空间 = 600- 600- 600= -600

子控件1宽度 = 600+ (1 / 3) * (-600)= 400

子控件2宽度 = 600+ (2 / 3) * (-600)= 200

看下效果是否和我们计算的一致:

android:layout_width="600px"

android:layout_height="match_parent"

android:orientation="horizontal">

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@android:color/holo_blue_light" />

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="2"

android:background="@android:color/holo_red_light"

android:singleLine="true" />

权重示例2.png

和我们计算的完全一致

子控件"wrap_content"与确定值计算方式同上,有空的可以验证下

另外需要注意一点:weight是float类型

android 高度上分权重,Android LinearLayout weight权重使用相关推荐

  1. android 高度上分权重,安卓自适应布局(关于权重weight的使用技巧!)

    weight和weightSum Layout Weight LinearLayout also supports assigning a weight to individual children ...

  2. android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!

    影响智能手机性能强弱的最关键部件就是SoC(处理器),这颗芯片采用的制程工艺.CPU架构和频率.GPU架构和频率都是至关重要的参数. 问题来了,想让普通消费者搞明白7nm和7nm EUV工艺的差异:C ...

  3. android通讯录上传服务器,Android 实现读取通讯录并上传服务器

    关键技术 - 内容解析者Resolver - ListView - Socket网络编程 权限申请 //需要在Manifest.xml文件中申请权限 布局: xmlns:app="http: ...

  4. 笔记本怎么用android,电脑上如何使用Android系统

    安卓系统能在安卓上运行?这将如何操作. 由于很多原因,搭载Windows及Android双系统的产品一直没有大规模上市,而类似华硕Transformer Book Trio这样的双系统产品价格则高达万 ...

  5. android mysql上传头像,Android自定义控件仿QQ编辑和选取圆形头像

    android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形. 首先我们要做一个处理图片的自定义控件,把传入的图片,经过用户选择区域,处理成一定的形状. 有的app是通过 ...

  6. android 卡片上滑放大,android仿摩拜单车APP、炫酷RecyclerView、卡片滑动、仿饿了么点餐、自定义索引等源码...

    Android精选源码 Android优质博客 前言permissions4m 最初的设计是仅仅做成一个编译器注解框架,在1.0.0版本时,它纯粹地实现了原生 Android 请求流程,关于它的设计思 ...

  7. android 高度百分比,如何在Android中进行百分比高度和宽度?

    现在,可以用Guidelines定位百分比值 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ap ...

  8. android标题栏上增加按钮,Android:向自定义标题栏添加按钮

    我创建了一个自定义标题栏,如本例所示 "一个自定义标题栏" – 一半下来. 在某些活动中,我想在标题栏的右侧放置一个按钮(与facebook app相同).我试图按如下方式向视图添 ...

  9. Android 实现上拉背景模糊,Android开发者珍藏必备【开源项目篇】

    日历 星期视图日历 日历列表视图 material风格的日历 提交日历日期 适配MD风格日历 toolbar相结合的弹出日历 横向日历 Tab Material风格的Tab Material风格的Ta ...

最新文章

  1. 计算机应用基础网络统考操作,全国网络统考《计算机应用基础》完整最新题库及答案[整理].pdf...
  2. (转自ITAA)个人问题汇总(workatlab)
  3. Algs4-1.4.7统计算术运算与比较次数
  4. mvc:default-servlet-handler/作用
  5. 1.5编程基础之循环控制 34 求阶乘的和
  6. java中如何播放wav_如何播放.wav文件与java
  7. 100道MySQL数据库面试题解析
  8. loss曲线 pytorch_PyTorch应用:用ResNet进行交通标志分类
  9. 《通信原理》复习笔记6----第六章数字基带传输系统(重中之重点+难上加难点)
  10. ASM Is Unable To Detect SCSI Disks On Windows. [ID 880061.1]
  11. Windows XP 64位注册表删除问题
  12. 人脸识别权威评测和人脸识别技术现状
  13. 计算机基础:13、计算机CPU--运算器
  14. CentOS7安装RabbitMQ(解决guest用户无法登录问题)
  15. Java实现 LeetCode 623 在二叉树中增加一行(遍历树)
  16. Java设计模式(疯狂Java联盟版)
  17. linux平台下苹果打包研究
  18. 在以太坊开发自己的ERC-20代币及如何ICO
  19. hbuilderx 使用总结
  20. C++-图像目标区裁剪ImageCropping

热门文章

  1. 作为一个上市公司HR,跟大家分享一些面试的真相
  2. 教育部:向高校免费开放2.4万余门在线课程(附22个平台链接)
  3. 人工智能秘史(一):会下棋的土耳其机器人
  4. 一个42KB的文件,解压完其实是个4.5PB的“炸弹”
  5. 入门 | 一文介绍机器学习中基本的数学符号
  6. 贾扬清演讲实录:一个AI开发者的奇幻漂流
  7. 如何将实时计算 Flink 与自身环境打通
  8. ClickHouse内核分析-MergeTree的存储结构和查询加速
  9. 勇攀监控高峰-EMonitor之根因分析 背景
  10. 通用网站备案常见的备案场景及要求