关于android layout_weight 详细介绍_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3083 | 回复: 0   主题: 关于android layout_weight 详细介绍        下一篇 
java_along
注册用户
等级:上尉
经验:771
发帖:36
精华:0
注册:2014-2-17
状态:离线
发送短消息息给java_along 加好友    发送短消息息给java_along 发消息
发表于: IP:您无权察看 2014-7-30 21:19:08 | [全部帖] [楼主帖] 楼主

Layout_weight是一个很重要的属性,分配权重,当然说的是线性布局的时候,也就是使用LinearLayout的时候。

什么时候使用Layout_weight呢,简单的说当你无法用match_parent 、wrap_content、直接分配固定值的时候。

需要按比例显示 1:1:1 这样显示按钮。当然这种需求的时候 你也可以直接使用GridLayout。

但是直接使用layout_weight 这个属性 会使这个功能更容易实现。

layout:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="button01"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="button02"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="button03"
/>
</LinearLayout>


显示效果:

北京联动北方科技有限公司

现在我把权重设为1:2:3

显示效果:

北京联动北方科技有限公司

感觉跟刚才好像差不多吧。

那么我们先不要设权重 试试,也就是每个button都充满内容,不设权重其实也就是权重为0。

显示效果:

北京联动北方科技有限公司

剩下的只有一点点空间。

根据上面3个例子。下面开始讲下是如何根据权重分配空间的。首先分配空间不是根据你当前父控件的空间来分配的。而是父控件的剩余空间来分配的。

按我们第三个例子来说,不是以3个button所在的LinearLayout的总宽度来根据权重分配,而是以LinearLayout在分配完三个按钮的宽度后所剩下的宽度再按权重去分配,这里有点需要说明的是 剩余空间允许是负数,比如LinearLayout给3个按钮分配后超出了自己本身的宽度,那么剩余空间就是负数。

这么一说,第二个例子的形成的原因就好理解了。LinearLayout先给3个button分配wrap_content的空间,然后剩下的空间按1:2:3分配给3个按钮。

下面我们再看一个例子,把wrap_content 全部改为match_parent

权重:0:0:0

显示效果:

北京联动北方科技有限公司

另外2个直接被挤到外面去了。

1:1:1


显示效果:

北京联动北方科技有限公司

 1:2:1


显示效果:

北京联动北方科技有限公司

Button2直接消失了,真是奇怪。

下面来分析下:

前面已经说了剩余空间有可能是负的。

下面来计算下。

LinearLayout先给3个button分配空间,3个都是match_parent,那么就是3*parent_with;

那么剩余空间就是parent_width-3*parent_width=-2*parent_width;

然后根据权重分配,并分别让3个按钮加上分配到的宽度。

所以

Button1_width=parent_width+(1/4)*-2*parent_width=1/2*parent_width;
Button3_width=parent_width+(1/4)*-2*parent_width=1/2*parent_width;
Button2_width=parent_width+(1/2)*-2*parent_width=0;。


这样大家可能就会觉得这样分配感觉很麻烦,好像还要自己计算。

其实大可不必如此,既然你使用layout_weight就是想按比例显示,那么你直接让所有的

View的layout_width都为固定值0,那么剩余空间就是LinearLayout的宽度,然后再按权重分配,就不用考虑剩余空间的问题。

该贴被java_along编辑于2014-7-30 21:25:25

该贴被java_along编辑于2014-7-30 21:26:33



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论