关于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权重的作用详析的更多相关文章

  1. Android 布局之LinearLayout 子控件weight权重的作用详析(转)

    关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...

  2. Android布局属性与常用控件

    一.Android常用布局属性 1. LinearLayout的特有属性 android:orientation:设置布局排列方式   android:layout_weight:设置所占布局的权重  ...

  3. Android 布局中 如何使控件居中

    首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...

  4. android:自己定义组合控件Weight(高仿猫眼底部菜单条)

    在我们实际开发其中.会碰见一些布局结构类似或者同样的界面.比如应用的设置界面.tabbutton界面等. 这时候.对于刚開始学习的人来说,xml里面一个个绘制出来也许是最初的想法.可能随着经验的积累, ...

  5. 【Android】HorizontalScrollView内子控件横向拖拽

    前言 网上ListView上下拖动的例子有,效果也很好,但是项目要横着拖的,只要硬着头皮自己写(主要是没找到合适的),参考文章1修改而来,分享一下. 声明 欢迎转载,但请保留文章原始出处:)  博客园 ...

  6. 关于ListView中item与子控件抢夺焦点的解决方法

    1.在开发中,listview可以说是我们使用最频繁的控件之一了,但是关于listview的各种问题也是很多.当我们使用自定义布局的Listview的时候,如果在item的布局文件里面存在Button ...

  7. 解决TalbleView头部或底部子控件不显示问题

    在自定义cell头部控件UITableViewHeaderFooterView(和自定义cell的方法几乎一样)时,出现了头部控件子控件不显示的问题. 注意和自定义cell的区别. .h文件 #imp ...

  8. Android listview子控件的的点击事件(转)

    1.先看图,是否是你想要的 2.布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout ...

  9. 记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

    前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLa ...

随机推荐

  1. 动态装载外部JavaScript脚本文件

    当我们请求一个URL地址时,浏览器会从远程服务器装载各种所需的资源,如JavaScript.CSS.图片等.而在加载JavaScript时,常常会发生下面这种情况: 也就是说,当浏览器碰到Script ...

  2. c#写扩展方法

    学习MVC时,学会了写扩展方法,用起来很方便. 01 using System; 02 using System.Collections.Generic; 03 using System.Linq; ...

  3. activity 保存数据

    activity 保存数据对android的商业项目十分的重要,譬如你在发微博的时候,突然来了一个电话,你洋洋洒洒写了100个字,你不能保存的话,你岂不要卖要骂娘. 那activity究竟是保存数据的 ...

  4. 【记录】cygwin下折腾个人配置环境

    (本文由hcbbt发布,转载请注明出处,blog.csdn[dot]net/hcbbT)      cygwin是windows下的linux的模拟环境,不仅可以执行linux的各种命令,可以在cyg ...

  5. iframe之onload事件小记

    项目上做了一个具有wizard(向导)功能的菜单导航页面,子页面的引入通过主页面上iframe的src属性切换实现.为了有个良好的交互体验,每次更新iframe的src时,主页面上都显示一个模态的lo ...

  6. Mac下进行基于java服务端语言的微信公众号本地js-sdk调试的大致方法

    开发微信公众号应用调用js-sdk,需要先在微信公众号后台配置可信域名,之后从微信的入口地址重定向到改域名下的路径后便会返回code,之后可以拿到一系列需要的参数等等.那么本地开发,如果使用的是PHP ...

  7. netdata的安装与使用

    具体的netdata介绍请参照GIT:https://github.com/firehol/netdata/wiki 以下只介绍centos下的netdata的安装与使用: 1.安装Netdata需要 ...

  8. Shell程序荟萃

    --------------纯输出----------------1.sh #!/bin/sh echo -e "Hello!world!\a\n"exit 0 --------- ...

  9. Android指令处理流程源代码追踪

    1.拨号界面输入*#06#.显示IMEI号,这是怎么出来的? 2.怎样高速的找出Android平台中的指令? 1. 在DialpadFragment中的EditText注冊一个Textchanged的 ...

  10. 检查许可证所需的adobe application manager 丢失或损坏

    安装Adobe公司的一般都需要账号,记得以前安装Flex也是,这里提供一个公用账号: 帐号:992829179@qq.com 密码:521521 在安装Acrobat_Ⅺ_Pro_11.0.03后,弹 ...