美文网首页
[学习]android 中的 LinearLayout 布局

[学习]android 中的 LinearLayout 布局

作者: 吴敬悦 | 来源:发表于2021-03-14 22:41 被阅读0次

    上一篇: [学习]android 中的 FrameLayout 布局

    今天按照上次总结出来的学习这个布局。

    LinearLayout 布局的官网: LinearLayout

    1. 有哪些 xml 属性及其对应的含义是什么?

    首先找到 XML attributes

    • android:baselineAligned 是否基线对其,其默认值也是 true
    • android:baselineAlignedChildIndex 是否以某个孩子对其,这里说到是,当 LinearLayout 是另一个布局的子布局的时候,是否基于非自己孩子节点的基线;
    • android:gravity 孩子节点的排序方式,有很多值,比如 center ,就是上下左右居中,可能你在设置的时候发现并没有上下居中,这个看看是否 LinearLayout 本身的高是否正确;如果有多个值,使用 | 分隔,比如下面的设置:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:gravity="start|bottom">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴敬"
            android:textColor="@color/black"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴天歌"
            android:textSize="24sp"
            android:textColor="@color/black"/>
    </LinearLayout
    

    其对应的效果如下:

    设置 start|bottom 的效果
    对于 android:baselineAligned 的值,在不写的情况,也就是默认情况是 true ,如果要达到如图所示的效果,那么需要设置成 false
    • android:measureWithLargestChild When set to true, all children with a weight will be considered having the minimum size of the largest child. If false, all children are measured normally. 大体含义就是如果设置成 true ,那么全部孩子都使用已经设置权重的最小宽度;如果你的布局是水平方向的,那么 LinearLayout 的宽度必须是 wrap_content ;如果是垂直方向的,那么高度必须是 wrap_content 。我们看一段代码,再看看效果:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:measureWithLargestChild="true"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴敬"
            android:textColor="@color/black"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴天歌"
            android:textSize="24sp"
            android:layout_weight="1"
            android:textColor="@color/black"/>
    </LinearLayout>
    

    这样的效果是这样的:


    android:measureWithLargestChild 设置为 true 的效果
    • android:orientation 这个应该都知道,就是子孩子的排列方式,是水平排列还是垂直排列;
    • android:weightSum 就是生效 weight 的孩子个数,具体看代码:
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="1">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴敬"
            android:layout_weight="1"
            android:textColor="@color/black"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="吴天歌"
            android:textSize="24sp"
            android:layout_weight="1"
            android:textColor="@color/black"/>
    </LinearLayout>
    

    效果为:

    设置 android:weightSum 的个数为 1 时的效果
    看到我明明都添加 android:layout_weight ,而且值为 1 ,但是只有第一个孩子生效。

    2. 子 View 可以设置哪些的 xml 属性有哪些?

    同样的打开 LinearLayout.LayoutParams 页面,网址为: LinearLayout.LayoutParams ,找到 XML attributes 属性这一栏,下图:

    LinearLayout.LayoutParams 中的 xml 属性
    • android:layout_gravity 是显示的位置,相对于 LinearLayout 的,如果是设置了 bottom ,那么这个子 View 就会在父级布局 LinearLayout 的底部,不管父级布局 LinearLayout 布局设置的 android:gravity 是啥;
    • android:layout_weight 这个就是权重,也就是父级布局 LinearLayout 的剩余空间怎么分配的问题,如果设置了这个值,那么剩余空间就都给设置了这个值的那个子 View ,其他的按内容大小;如果多个设置,那么就是设置的一起平摊剩下的空间,同时这个属性受 android:weightSum 属性的影响;

    3. 都暴露了哪些方法可以直接调用?

    打开原来的网站,也就是第一项中,找到 Public methods 这一栏,下面全是暴露的方法,方法很多我就不一一说明了。

    同时我也遇到了一个问题,那就是怎么有些属性能够直接修改,而有些却不能呢,为啥就不能都提供方法呢,这个留给下一节去探索。

    相关文章

      网友评论

          本文标题:[学习]android 中的 LinearLayout 布局

          本文链接:https://www.haomeiwen.com/subject/yivccltx.html