上一篇: [学习]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
其对应的效果如下:
对于
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:layout_weight
,而且值为 1 ,但是只有第一个孩子生效。
2. 子 View
可以设置哪些的 xml
属性有哪些?
同样的打开 LinearLayout.LayoutParams
页面,网址为: LinearLayout.LayoutParams ,找到 XML attributes
属性这一栏,下图:
- android:layout_gravity 是显示的位置,相对于
LinearLayout
的,如果是设置了bottom
,那么这个子View
就会在父级布局LinearLayout
的底部,不管父级布局LinearLayout
布局设置的android:gravity
是啥; - android:layout_weight 这个就是权重,也就是父级布局
LinearLayout
的剩余空间怎么分配的问题,如果设置了这个值,那么剩余空间就都给设置了这个值的那个子View
,其他的按内容大小;如果多个设置,那么就是设置的一起平摊剩下的空间,同时这个属性受android:weightSum
属性的影响;
3. 都暴露了哪些方法可以直接调用?
打开原来的网站,也就是第一项中,找到 Public methods
这一栏,下面全是暴露的方法,方法很多我就不一一说明了。
同时我也遇到了一个问题,那就是怎么有些属性能够直接修改,而有些却不能呢,为啥就不能都提供方法呢,这个留给下一节去探索。
网友评论