当前位置: 首页 > news >正文

奇葩属性:layout_weight 的解释及使用

在Android的控件布局中,有一个奇葩的 layout_weight 属性,定义如下:

layout_weight : 用于指定剩余空闲空间的分割比例。用法:

01<LinearLayout
02  android:orientation="horizontal">
03 
04  <TextView
05      android:layout_width="wrap_content"
06      android:layout_height="wrap_height"
07      android:layout_weight="1"
08      android:text="888"/>
09 
10  <TextView
11      android:layout_width="wrap_content"
12      android:layout_height="wrap_height"
13      android:layout_weight="1"
14      android:text="999999"/>
15 
16</LinearLayout>

为什么说是奇葩呢?

以上面的布局代码为例,TextView-888 和 TextView-999999 是横向排列的2个控件,它们的layout_weight="1",说明这2个控件平分了所在LinearLayout的剩余的空闲空间, 我们很容易的就误认为这2个控件平分了水平方向的空间,即:各自占据了 50% 的宽度。

其实这是错误的,而是:TextView-999999控件所占据的宽度 > TextView-888所占据的宽度。因为999999字符占据的宽度大于888占据的宽度,即:w(999999) + 1/2空闲空间 > w(888) + 1/2空闲空间

这就是它奇葩的地方,很容易就让我们一直误认为是整个控件分割空间。到这里,大家一定会认为,这样的话,layout_weight 这个属性就没有什么意义了,原以为它可以分配空间呢,原来只是分割剩余空闲空间。

其实,呵呵,layout_weight 是可以用来进行整个空间的分割的,如果我们让控件的宽度定义为0,这样比如2个控件的 layout_weight="1" 就可以各自50%平分整个空间了,因为:0 + 1/2空闲空间 = 0 + 1/2空闲空间

这是一个小技巧,也是非常实用的一个实用layout_weight分割方案:定义控件的 layout_width="0dp" 或 layout_height="0dp" 配上 layout_weight 就可以实现对整个空间的比例分割了。

下面定义了2个控件的 layout_width="0dp", layout_weight="1",实现了水平方向50%平均分割:

01<LinearLayout
02  android:orientation="horizontal">
03 
04  <TextView
05      android:layout_width="0dp"
06      android:layout_height="wrap_height"
07      android:layout_weight="1"
08      android:text="888"/>
09 
10  <TextView
11      android:layout_width="0dp"
12      android:layout_height="wrap_height"
13      android:layout_weight="1"
14      android:text="999999"/>
15 
16</LinearLayout>

下面定义了2个控件的 layout_height="0dp", layout_weight="1",实现了竖直方向50%平均分割:

01<LinearLayout
02  android:orientation="vertical">
03 
04  <TextView
05      android:layout_width="wrap_content"
06      android:layout_height="0dp"
07      android:layout_weight="1"
08      android:text="888"/>
09 
10  <TextView
11      android:layout_width="wrap_content"
12      android:layout_height="0dp"
13      android:layout_weight="1"
14      android:text="999999"/>
15 
16</LinearLayout>

layout_weight 原来是可以这么用滴 

相关文章:

  • DDoS***防御和分析
  • Oracle字符分隔函数(split)
  • 编译u-boot命令和u-boot常用命令
  • Win7的ftp功能
  • 初识linux之LEMP
  • ORACLE expdp/impdp详解
  • Java中的String对象是不可变的吗
  • 9款极具创意的HTML5/CSS3进度条动画
  • 一、NGINX简介
  • 页面工具集
  • 大型网站性能监测、分析与优化常见问题QA
  • 导数组合的极限
  • JVM的粗略简述
  • jquery 重置表单
  • MyBatis 通过包含的jdbcType类型
  • ----------
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【剑指offer】让抽象问题具体化
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • exports和module.exports
  • js递归,无限分级树形折叠菜单
  • ReactNativeweexDeviceOne对比
  • Sequelize 中文文档 v4 - Getting started - 入门
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 聊聊directory traversal attack
  • 微服务入门【系列视频课程】
  • 线上 python http server profile 实践
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • RDS-Mysql 物理备份恢复到本地数据库上
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • (1)bark-ml
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (C语言)共用体union的用法举例
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (已解决)什么是vue导航守卫
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .apk文件,IIS不支持下载解决
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET HttpWebRequest、WebClient、HttpClient
  • .Net 中Partitioner static与dynamic的性能对比
  • .NetCore部署微服务(二)
  • .NET建议使用的大小写命名原则
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [20140403]查询是否产生日志
  • [20190401]关于semtimedop函数调用.txt