zoukankan      html  css  js  c++  java
  • 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值在保证空间最小尺寸的前提下去分配父控件多余的尺寸(相对于所有子控件在该方向上的尺寸之和),实现一些特定比例的效果,具体的在此不再展开,感兴趣的可以根据公式计算,自己亲自去尝试一下,应该会有你意想不到的收获。

    http://blog.csdn.net/blogblj/article/details/19677575

    http://zhangkun716717-126-com.iteye.com/blog/1870924

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/softidea/p/4342843.html
Copyright © 2011-2022 走看看