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,以此类推。
layout_weight属性详解的更多相关文章
- android:layout_weight属性详解 (转)
在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...
- android:layout_weight属性详解(转)
在android开发中LinearLayout很常用,LinearLayout的内控件的android:layout_weight在某些场景显得非常重要,比如我们需要按比例显示.android并没用提 ...
- android:layout_weight属性详解
weight:重量.权重. 当我们给一个view设置了android:layout_weight属性,意味着赋予它话语权,常规思维就是谁的weight大,谁说了算(空间占比大). 下面我们来看下具体的 ...
- android:layout_weight属性详解
1. 按比例显示LinearLayout内各个子控件,需设置android:layout_width="0dp",如果为竖直方向的设置android:layout_height=& ...
- Android之layout_weight属性详解
博文:http://www.cnblogs.com/net168/p/4227144.html讲分非常好,推荐下
- Android组件---四大布局的属性详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4372222.html Android常见布局有下面几种: LinearL ...
- Android TextView和EditText属性详解
TextView属性详解: autoLink设置 是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web /email/phone/map/all) ...
- EditText属性详解
关于EditText属性详解很详细的记录,转过来收着 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password=" ...
- android:exported 属性详解
属性详解 标签: android 2015-06-11 17:47 27940人阅读 评论(7) 收藏 举报 分类: Android(95) 项目点滴(25) 昨天在用360扫描应用漏洞时,扫描结果, ...
随机推荐
- 开始学习Lucene
最近百度的魏则西事件闹的沸沸扬扬,突然有个想法:是否百度的中文搜索目前还没有人能挑战它的地位呢? 哈哈,想的太多了,正巧毕业设计就和搜索有关,当时只是大致了解了概念:如分词.排序.索引.爬虫等,并以此 ...
- Android应用开发提高篇(3)-----传感器(Sensor)编程
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/29/2373420.html 一.概述 Android支持的传感器种类越来越多了,这确实是一件可 ...
- Last Defence (run time error)
Last Defence时间限制:1000 ms | 内存限制:65535 KB描述Given two integers A and B. Sequence S is defined as follo ...
- PHP输出中文乱码的解决方法
最近在windows上发现PHP程序中输出来的中文有乱码的情况. 看了很多帖子资料说可以在页面上添加: http://www.cnblogs.com/leandro/archive/2008/04/2 ...
- 微信公众号token验证失败的一些总结
这几天准备弄一个微信公众号,在进行服务器配置的时候出现总是出现token验证失败的报错. 实际上,这个问题很好解决.既然微信平台没有给我们很明确的报错提示,那么我们就可以通过跟踪获取到的请求参数进行分 ...
- sqlserver 在将 nvarchar 值 'XXX' 转换成数据类型 int 时失败
最近做oracle和sqlserver数据库兼容,感觉sqlserver真心没oracle好用,存储过程竟然只能返回int类型,疯了 疯了 存储过程的output及return的区别 sql取整 ce ...
- object-c 协议(Protocols)和代理(Delegation)的学习
代理是Object-C中的一个重要机制,他可以将面向对象编程的封装特性进一步加强,不是自己负责的事情坚决不做,而是转而让对应的事情负责人(代理)去做.相反如果是自己需要负责的事情(作为别人的代理),会 ...
- web乱码问题
String data = "不见青山"; ServletOutputStream sos = response.getOutputStream(); byte b[] = dat ...
- java从c struct传来的字节数组中取值
public int getInt(byte[] array,int index) { return (array[index] & 0xff) | (array[index + 1] & ...
- android-意图Intent
Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent (意图) ,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递 Intent 来 ...