必威体育Betway必威体育官网
当前位置:首页 > IT技术

LinearLayout的layout_weight属性的计算

时间:2019-06-28 11:40:00来源:IT技术作者:seo实验室小编阅读:77次「手机版」
 

layout_weight

layout_weight表示view分配到的额外的布局空间,可正可负。

布局的时候,系统先按照view的layout_width和layout_height来布局,然后再根据layout_weight对view的位置进行调整。

举例来说

<?xml version="1.0" encoding="utf-8"?>
<layout
    xmlns:Android="http://schemas.android.com/apk/res/android">
    <data></data>
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        >

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#00f"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#f00"
            android:layout_weight="1"/>

    </LinearLayout>
</layout>

这样一个布局,由于LinearLayout是vertical的,layout_weight作用在vertical上,系统在布局的时候:

1. 根据layout_height,三个view都是match_parent,所以三个view的高度都是 parent-height,总高度为parent-height * 3,viewGroup原有的空间为parent-height,因此余下的空间为-parent-height * 2。

2. 根据layout_weight分配余下的空间。layout_weight的和为3,单个view的layout_weight为1,所以分到的layout_height为-parent-height * 2 * 1/3 = -parent-height * 2/3。

3. 两次分配的layout_height相加,得到最终的layout_height = parent-height - parent-height * 2/3 = parent-height / 3;

如果viewGroup设置了weightSum,则优先以weightSum作为view分配额外空间时的分母。如果weightSum=3,则与上述情况一致。考虑一下冲突的情况。

首先,令weightSum = 2,preview变成这样

还是按照上面的分析,粗体部分是区别,系统布局的时候是这样:

1. 根据layout_height,三个view都是match_parent,所以三个view的高度都是 parent-height,总高度为parent-height * 3,viewGroup原有的空间为parent-height,因此余下的空间为-parent-height * 2。

2. 根据layout_weight分配余下的空间。layout_weight的和被设置为layoutSum = 2,单个view的layout_weight为1,所以按照LinearLayout的线性顺序,前两个View就占据了所有的weightSum,只有它们能分配额外的布局空间,第三个View不分配额外的布局空间,前两个View分到的layout_height为-parent-height * 2 * 1/2 = -parent-height。

3. 两次分配的layout_height相加,得到最终的layout_height,前两个View的layout_height = parent-height - parent-height = 0,所以不显示,第三个View的layout_height = parent-height + 0 = parent-height,所以占满ViewGroup。

然后,令weightSum = 4,preview变成这样

还是按照上面的分析,粗体部分是区别,系统布局的时候是这样:

1. 根据layout_height,三个view都是match_parent,所以三个view的高度都是 parent-height,总高度为parent-height * 3,viewGroup原有的空间为parent-height,因此余下的空间为-parent-height * 2。

2. 根据layout_weight分配余下的空间。layout_weight的和被设置为layoutSum = 4,单个view的layout_weight为1,所以按照LinearLayout的线性顺序,三个View都能分配额外的布局空间,每个View分到的layout_height为-parent-height * 2 * 1/4 = -parent-height / 2。

3. 两次分配的layout_height相加,得到最终的layout_height,每个View的layout_height = parent-height - parent-height / 2  = parent-height / 2,按照LinearLayout的线性顺序,前两个View就占满了viewGroup,所以第三个View就看不到了。

相关阅读

Android-0.Android Studio布局中layout_weight用法

Indicates how much of the extra space in the LinearLayout is allocated to the view associated with these LayoutParams.

layout_weight用法以及注意事项

1、实现了水平方向50%平均分割 <LinearLayout android:orientation="horizontal"> <TextView android:layout_widt

Android:layout_weight的使用和坑

问题今天做项目有一个需求,一个TextView单行显示,多出来的字使用跑马灯效果,然后一个TextView后面要跟一个图片,当时想着怎么弄好呢,文

Android布局基础知识:wrap_content,match_parent,layou

wrap_content:是layout_width和layout_height的属性值之一,表示和自身内容一样的长度。match_parent:是layout_width和layout_heig

分享到:

栏目导航

推荐阅读

热门阅读