Android五种布局

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android五种布局相关的知识,希望对你有一定的参考价值。

1. LinearLayout

LinearLayout是线性布局控件,它包含的子控件将以横向或纵向排列。

注:布局之间可以嵌套使用。即布局内既可包含控件,又可包含布局。

两个全局属性:

1. android:orientation --决定其子类控件排布方式

android:orientation="horizontal" --水平排布
android:orientation="vertical" --垂直排布

2. android:gravity --决定子类控件位置

android:gravity="bottom" --底部
android:gravity="bottom|center_horizontal"--标签可连用(注:竖线左右不能加空格,需要注意逻辑)

--gravity几个属性值:
center_horizontal  --水平居中
center_vertical  --垂直居中
center  --水平垂直都居中
right  --子类控件位于当前布局的右边
left  --子类控件位于当前布局的左边
bottom  --底部
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

子控件常用属性:

1. android:layout_gravity= "bottom"  --控件本身在当期父容器的位置
2. android:layout_weight= "n"  --指本身控件占当前父容器的一个比例(n为数字)
  • 1
  • 2

weight属性示例代码:

<EditText 
    android:id="@+id/text_1"
    android:layout_width="0dp" --注意此处为0dp(勿忘单位)
    android:layout_weight="1" --weight
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/button1"
    android:layout_width="0dp" --注意此处为0dp(勿忘单位)
    android:layout_height="wrap_content"
    android:layout_weight="1" --weight
    android:text="send" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

注意:两个控件的layout_width属性均为”0dp”,也说明有layout_weight属性的时候,layout_width属性不起作用。而此处指定为0是一种比较规范的写法。

效果如图所示: 
技术分享

注:系统会先把 LinearLayout下所有控件指定的layout_weight 相加,得到一个总值,然后每个控件所占大小的比例就是用该控件的layout_weight 值除以刚才算出的总值。

若代码改为:

<EditText 
    android:id="@+id/text_1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="send" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

则效果如下图所示: 
技术分享 
这样看起来更加舒服,而且在各种屏幕上的适配效果会更好。

注意: 
1. gravity是用于指定文字在控件中的对齐方式;而layout_gravity是用于指定控件在布局中的对齐方式。 
2. 当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效。因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对齐方式。同理,当 LinearLayout 的排列方向是vertical时,只有水平方向上的对齐方式才会生效。

2. RelativeLayout

RelativeLayout是相对布局控件,它包含的子控件将以控件之间的相对位置或者子类控件相对父类容器的位置的方式排列。 
子类控件相对父类容器:

android:layout_margin="40dp" --子控件距父容器的边距
android:layout_marginLeft="32dp" --子控件距父容器的左边距
android:layout_marginTop="40dp" --子控件距父容器的顶边距

android:layout_alignParentLeft="true" --子控件相对当前父容器靠左边
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true" --子控件相对父容器水平居中
android:layout_centerVertical="true"
android:layout_centerInParent="true" --水平、垂直都居中
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

子类控件相对子类控件:

android:layout_below="@+id/bt1" --给定标签的底部
android:layout_above="@+id/bt1" --上面
android:layout_toRightOf="@+id/bt1" --右边

android:layout_alignBaseline="@+id/bt1" --该控件与给定控件内容在一条线上
android:layout_alignTop="@+id/bt1" --该控件与给定控件顶部对齐
android:layout_alignBottom="@+id/bt1"
android:layout_alignLeft="@+id/bt1" --该控件与给定控件左边缘对齐
android:layout_alignRight="@+id/bt1"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3. FrameLayout

FrameLayout是帧布局中,所有子元素都不能被放置指定位置,默认放在布局左上角。且后面的子元素直接覆盖在前面的子元素之上,可将前面的子元素部分或全部遮挡。 
如图所示: 
技术分享 技术分享

几个属性:

android:foreground="" --设置前景图 ,在所有子视图的前面
android:foregroundGravity="" --设置前景图位置

android:layout_gravity="center" --设置居中
android:background= "#999999" --设置背景

android:keepScreenOn="true" --保持屏幕唤醒
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4. TableLayout

TableLayout表格布局模型以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象。

如图所示: 
技术分享

TableLayout全局属性:

android:collapseColumns="n" --隐藏第 n 列
android:stretchColumns= "m, n" --拉伸第 m,n 列
android:shrinkColumns= "n" --压缩第 n 列
  • 1
  • 2
  • 3

注意:索引从0开始,多个之间用逗号分隔( * 号表示所有列)

TableLayout局部属性:

android:layout_column= "n" --该控件占据第 n 列(注意:从第0列开始算起)
android:layout_span= "n" --该控件占用 n 列
  • 1
  • 2

注:TableRow 中的控件不能指定宽度。

5. AbsoluteLayout

AbsoluteLayout是绝对布局,又可叫坐标布局,可直接指定子元素的绝对位置(xy坐标)。由于手机屏幕尺寸差别比较大,故绝对布局适应性差。因此该布局方式用的较少。了解即可。

以上是关于Android五种布局的主要内容,如果未能解决你的问题,请参考以下文章

Android中的五种布局方式

Android片段布局完成膨胀

Android五种布局

Android基础之常用五种布局

Android获取片段中的布局高度和宽度

如何在android中的地图片段内中心线性布局?