Android 布局之LinearLayout 子控件weight权重的作用详析
关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法:
说法一:值越大,重要性越高,所占用的空间越大;
说法二:值越大,重要性越低,所占用的空间越小。
到底哪个正确?哪个错误?抑或还有其他解释?请点击查看关于weight 权重参数作用的详分析:
其实这两种情况都不太准确;
准确的解释是,weight 权限 是用于分配父控件某一方向上尺寸-所有子控件在该方向上设定尺寸和
所得值的一个参数,把这个相减得到的结果(可能为正也可能为负)按照某个子控件weight值占所有weight值的比例分配给子控件,子控件在该方向上
的最终实际尺寸为(控件设定尺寸+weight权限分配尺寸(可能为负))。
例如竖直方向的LinearLayout控件F中,两个控件分别为:
A控件 hight = a, weight =w_a;
B控件 hight = b,weight=w_b;
父控件F 实际 hight = c;
则控件A和控件B的最终实际尺寸为:
A控件实际hight_a =a+(c-(a+b))*w_a/(w_a+w_b) ;
B控件实际hight_b =b+(c-(a+b))*w_b/(w_a+w_b) ;
若:w_a= 1; w_b= 2;
则:
hight_a=a+(c-(a+b))/3;
hight_b=a+(c-(a+b))*2/3;
所以 当(c-(a+b))值大于0时,也就是所有子控件高度(或宽度)之和小于父控件高度(或宽度)时,weight权限值越大会使得控件尺寸在原设定尺寸基础上增加的值越大;
所以 当(c-(a+b))值小于0时,也就是所有子控件高度(或宽度)之和大于父控件高度(或宽度)时,weight权限值越大反而会使得控件尺寸在原尺寸基础上减去的值更大;
但控件的实际尺寸是按上面公式计算结果得出,控件之间并不是在所有情况下都是weight值越大控件所占空间越大或weight值越小控件所占空间越小。
那么为什么一般大家都这么认为呢?其实是有两种特殊情况:
一是:所有控件该方向尺寸都设定为0dp,这时 公式中的a=0;b=0;最终A、B控件的尺寸分别为:
hight_a=c*w_a/(w_a+w_b);
hight_b=c*w_b/(w_a+w_b);
这就是所谓的说法一:值越大,重要性越高,所占用的空间越大。
二是:所有控件该方向尺寸都设定为fillparent,这时 公式中的a=c;b=c;最终A、B控件的尺寸分别为:
hight_a=c*(1-*w_a/(w_a+w_b));
hight_b=c*(1-*w_b/(w_a+w_b));
这就是所谓的说法二:值越大,重要性越高,所占用的空间越小。
至此,关于LinearLayout布局中的控件 的weight值的的作用,应该有了一个比较正确的认识了:
尺寸是通过公式计算出来的,只有在特殊情况下才会是普遍认为的:值越
空间越大或值越大占用空间越小。
还有一个我认为是经常不被大家所注意的但也特别实用的用途就是:可以利用weight值在保证空间最小尺寸的前提下去分配父控件多余的尺寸(相对于
所有子控件在该方向上的尺寸之和),实现一些特定比例的效果,具体的在此不再展开,感兴趣的可以根据公式计算,自己亲自去尝试一下,应该会有你意想不到的
收获。
Android 布局之LinearLayout 子控件weight权重的作用详析的更多相关文章
- Android 布局之LinearLayout 子控件weight权重的作用详析(转)
关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...
- Android布局属性与常用控件
一.Android常用布局属性 1. LinearLayout的特有属性 android:orientation:设置布局排列方式 android:layout_weight:设置所占布局的权重 ...
- Android 布局中 如何使控件居中
首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...
- android:自己定义组合控件Weight(高仿猫眼底部菜单条)
在我们实际开发其中.会碰见一些布局结构类似或者同样的界面.比如应用的设置界面.tabbutton界面等. 这时候.对于刚開始学习的人来说,xml里面一个个绘制出来也许是最初的想法.可能随着经验的积累, ...
- 【Android】HorizontalScrollView内子控件横向拖拽
前言 网上ListView上下拖动的例子有,效果也很好,但是项目要横着拖的,只要硬着头皮自己写(主要是没找到合适的),参考文章1修改而来,分享一下. 声明 欢迎转载,但请保留文章原始出处:) 博客园 ...
- 关于ListView中item与子控件抢夺焦点的解决方法
1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button ...
- 解决TalbleView头部或底部子控件不显示问题
在自定义cell头部控件UITableViewHeaderFooterView(和自定义cell的方法几乎一样)时,出现了头部控件子控件不显示的问题. 注意和自定义cell的区别. .h文件 #imp ...
- Android listview子控件的的点击事件(转)
1.先看图,是否是你想要的 2.布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout ...
- 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。
前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLa ...
随机推荐
- 动态装载外部JavaScript脚本文件
当我们请求一个URL地址时,浏览器会从远程服务器装载各种所需的资源,如JavaScript.CSS.图片等.而在加载JavaScript时,常常会发生下面这种情况: 也就是说,当浏览器碰到Script ...
- c#写扩展方法
学习MVC时,学会了写扩展方法,用起来很方便. 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; ...
- activity 保存数据
activity 保存数据对android的商业项目十分的重要,譬如你在发微博的时候,突然来了一个电话,你洋洋洒洒写了100个字,你不能保存的话,你岂不要卖要骂娘. 那activity究竟是保存数据的 ...
- 【记录】cygwin下折腾个人配置环境
(本文由hcbbt发布,转载请注明出处,blog.csdn[dot]net/hcbbT) cygwin是windows下的linux的模拟环境,不仅可以执行linux的各种命令,可以在cyg ...
- iframe之onload事件小记
项目上做了一个具有wizard(向导)功能的菜单导航页面,子页面的引入通过主页面上iframe的src属性切换实现.为了有个良好的交互体验,每次更新iframe的src时,主页面上都显示一个模态的lo ...
- Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法
开发微信公众号应用调用js-sdk,需要先在微信公众号后台配置可信域名,之后从微信的入口地址重定向到改域名下的路径后便会返回code,之后可以拿到一系列需要的参数等等.那么本地开发,如果使用的是PHP ...
- netdata的安装与使用
具体的netdata介绍请参照GIT:https://github.com/firehol/netdata/wiki 以下只介绍centos下的netdata的安装与使用: 1.安装Netdata需要 ...
- Shell程序荟萃
--------------纯输出----------------1.sh #!/bin/sh echo -e "Hello!world!\a\n"exit 0 --------- ...
- Android指令处理流程源代码追踪
1.拨号界面输入*#06#.显示IMEI号,这是怎么出来的? 2.怎样高速的找出Android平台中的指令? 1. 在DialpadFragment中的EditText注冊一个Textchanged的 ...
- 检查许可证所需的adobe application manager 丢失或损坏
安装Adobe公司的一般都需要账号,记得以前安装Flex也是,这里提供一个公用账号: 帐号:992829179@qq.com 密码:521521 在安装Acrobat_Ⅺ_Pro_11.0.03后,弹 ...