layout_weight部分常见属性解析
2016-01-06 09:59
253 查看
</pre><pre name="code" class="html"><pre name="code" class="java"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="48dp" android:layout_weight="1" android:background="#44f00000"//设置背景颜色 android:gravity="center" android:text="111111111111" /> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:background="#44f00ff0" android:gravity="center" android:text="2" /> <TextView android:layout_width="0dp" android:layout_height="48dp" android:layout_weight="2" android:background="#440000ff" android:gravity="center" android:text="3" /> </LinearLayout>
如上面xml文件所示则显示的布局如图:解释一下,它是先将wrapcontent所占的长度分出去然后再将剩余控件的长度按照weight的比例1:2:2再次进行分配。
若将第一个TextView的layout_width设置成0dp,则如下图显示:
此时可以发现第一个TextView的控件不在与另外两个底部相持平,但是第一个TextView空间里面内容的第一行还是与其他控件的内容相持平的。此时需要在父布局LinearLayout中设置android:baselineAligned="false"将默认设置设置为false,此时因为三个TextView的控件的Layout_weight都为0dp,所以此时的宽度就会按照weight的比例1:2:2的宽度来显示如图所示:
可以看出LinearLayout中的weight属性首先按照控件声明中的尺寸进行分配,然后将剩下 的尺寸按weight分配。
若将三个TextView的控件的wight都设置成match_parent,此时三个控件如下图所示:
为什么会是这样呢,明明比例是1:2:2啊。
首先减去控件声明的尺寸剩下的尺寸在按比例分配。假设外层的LinearLayout是480,这里三个TextView声明的宽度都是480,而第一个就把这个480分配完了,于是减去控件声明的宽度此时剩余的宽度是480-480*3=-960是负的960,把这-960在平均分成5份,第一个TextView占据其中的一份,第二个和第三个TextView各占据两分,于是:
第一个TextView所占据的宽度应该是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.2)=480*(3/5)。
第二个TextView所占据的宽度就是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.4)=480*(1/5)。
第三个TextView所占据的宽度就是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.4)=480*(1/5)。
如果说在linearlayout当中只有一个Textview并且你想让他占据整个宽度的二分之一的话,只需要在父布局中设置weightSum=2在子空间TextView中设置weight等于1就可以了。
相关文章推荐
- web.xml报错Referenced file contains errors
- Linux常见后缀缩写含义
- C# 中的委托和事件
- json序列化和反序列化
- echo后的逗号与点号
- linux系统命令sudo权限-40
- elk日志系统的搭建
- PHP检测utf8字数,包括中文
- Android不调用第三方程序发送邮件
- C#学习笔记——MDI窗体(多文档界面)
- android 判断应用是否在后台
- mq的链接 消息读取与存放
- Android实现点击通知栏通知恢复前台
- Spring多数据源的配置和使用
- git客服端基本操作
- 经验分享:CSS浮动(float,clear)通俗讲解
- JAVA访问数据库之连接数据库
- java对象的强引用,软引用,弱引用和虚引用
- C::B的自动换行问题
- ubuntu15.0使用问题总结