美文网首页
Android常用几种布局

Android常用几种布局

作者: 雯艺雪 | 来源:发表于2019-04-08 17:32 被阅读0次

一、线性布局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-1080
2=-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帧布局采用栈的数据存储格式,所以每次添加新的组件都会覆盖显示;

相关文章

网友评论

      本文标题:Android常用几种布局

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