zoukankan      html  css  js  c++  java
  • layout_weight属性详解

         看到上面这段代码,大家肯定认为三个TextView的宽度是1:2:2,但实际上是如图1这样的,宽度之比确实是1:2:2,但为什么第一个和后两个是齐平的呢?下面我给大家画一条线,可以看到虽然控件是没有对齐的,但是三个TextView里的第一行文本是对齐的,这是因为TextView 在LinearLayout中会参考父类的基线BaseLine,如图2,如何避免这个问题呢,只需设置LinearLayout的一个属性即可,,如图3。

                                  图一                                                                       图二                                                           

                             

                                       图三

                                                                                                      

            接下来我要把第一个TextView的宽度设置为wrap_content,其余的两个TextView的宽还是0dp,那么效果就会变成下边的样子,并不符合我们的预期1:2:2的比例。也就是说wrap_content会影响TextView在父控件中所占的比例,出现这样的结果的原因是LinearLayout中的wrap_content属性,而TextView控件的尺寸是这样计算的:首先是按照控件的属性进行分配的,然后将剩下来的尺寸按照weight再进行分配。假设手机宽度是480dp,具体计算是这样的,因为后两个的宽度为0dp,所以只需要sySize(剩余尺寸)=480-第一个TeXView的wrap_content的宽度,然后再把sySize的尺寸进行1:2:2的分配,这样得到的才是TextView最后的尺寸。

           

         最后我把三个TextView的宽度都设置成match_parent,看下边的效果图会发现,weight为1的反而比weight为2的尺寸要大。出现这样结果的原因也是因为在计算TextView宽度的时候,首先最外层的LinearLayout的尺寸减去TextView声明的尺寸,然后将剩下的尺寸按照比例分配。假设LinearLayout的尺寸为480dp,那么剩余尺寸sySize=480-480X3=-960dp,然后把sySize平均分成五分为960/5=192dp(不考虑正负),那么第一个TextView的尺寸=480-192=288dp,第二个TextView的尺寸=480-192X2=96dp。

            

         ayout_weight属性的最后一个作用,如果在LinearLayout中只有一个TextView,并且这个TextView的尺寸为LinearLayout的一半,就可以这样设置。如果想让TextView占LinearLayout的2/3,就可以把weightSum设置成3,weight设置成2,以此类推。

                                                                                           

         

        

  • 相关阅读:
    Java实现图片裁剪预览功能
    数据结构——用C语言描述 第2版 课后答案 耿国华 版 实习题课后答案 高等教育出版社 课后习题答案 第3章 答案与解析
    对J2EE应用系统分层设计的思考
    Java实现Windows的dir命令
    Java与模式:适配器模式
    修改LigerUI的导航栏,改为Tab标签模式
    图解AngularJS Wijmo5和LightSwitch
    Sencha Cmd中脚本压缩方法之比较
    实变函数与泛函分析基础 第四版 答案 程其襄、张奠宙、胡善文、薛以锋 版 课后答案 高等教育出版社 习题答案 第一章 课后习题答案
    用edtftpj实现Java FTP客户端工具
  • 原文地址:https://www.cnblogs.com/chentong/p/5396095.html
Copyright © 2011-2022 走看看