一、线性布局LinearLayout
1、排列方向:orientation设置
2、weight属性:占比
剩余空间的占比。
比如,如果有text1和text2,假设每个text的宽度是120px,那么在1080px的屏幕上,刚开始剩余空间是840px,假设text1占比1,text2占比2,那么text1的宽度是120+840/3=400排序,text2宽度=120+840/32=680px,显示效果text2比text1宽度大。
如果text1和text2均设置为match_parent,假设text1占比1,text2占比2,此时text1则会比text2大。因为,一开始text1和text2占用的都是1080px,剩余的空间就是1080-10802=-1080px,是负数,因此text1的宽度是1080+(-1080)/3=720px,text2的宽度为1080+(-1080)/3*2=360px,所以text1的宽度比text2的还大。
3、layout_gravity
linearLayout中设置layout_gravity无效,因为linearLayout是线性布局,必须从左到右或从上到下排列。
注意:match_parent指占用父控件剩下的空间的全部。
所以,
当text1和text2都占用match_parent时,text1将获得父控件剩余的全部空间,text2将占用0;结果是text1可见且占满这个父控件而text2不可见。
当text1占用wrap_content时,text1先占用一部分空间,text2占用剩下的父控件的全部空间,结果是text1和text2均可见且text1大小小于text2的大小。
4、weightSum——子控件weight的最大占比
例如父控件weight_sum为n,子控件A的layout_weight为a,子控件B的layout_weight为b,则
子控件A占用空间为= 子控件A原本大小+a/n*剩余空间大小。
如果子控件长度最后大于父控件长度,将超出父控件的范围,子控件无法显示全部。
5、设置分割线
android:showDividers="middle"
android:divider="@android:color/black"
二、帧布局FrameLayout
1、特点
往里面添加控件时默认添加到左上角,且没有任何的定位方式可以定位(layout_gravity除外),其大小由最大的子控件决定。
2、常用属性
android:foreground:帧布局的前景图像
android:foregroundGravity:帧布局的前景图像的显示位置
三、相对布局RelativeLayout
四、约束布局ConstraintLayout
[参考]https://juejin.im/entry/5bb18966f265da0aea698c58
1、简介
ConstrainLayout是一个允许开发者灵活地设置控件的位置和大小的ViewGroup。 只要你使用的Android系统版本在9以上,你便可以通过添加依赖的方式来使用ConstrainLayout.
2、使用
添加依赖
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
3、常用约束
-相对定位(Relative positioning)
相对定位是ConstrainLayout构建布局的一种基本方式。相对定位约束可以帮助我们通过一个给定的Widget来摆放另外一个Widget。我们可以在横纵两个方向上约束Widget。
横向: left, right, start and end sides 纵向: top, bottom sides and text baseline
<Button android:id="@+id/buttonA" ... />
<Button android:id="@+id/buttonB" ...
app:layout_constraintLeft_toRightOf="@+id/buttonA" />
总结:LinearLayout线性布局内部实现时必定是链表或队列的形式;FrameLayout帧布局采用栈的数据存储格式,所以每次添加新的组件都会覆盖显示;
网友评论