Android UI基础——五大布局

一个丰富的界面是由很多个控件组成的,如何让各个控件都有条不紊的摆放在介面上,这就需要布局来实现了,布局可以说是一种容器,可以按照一定规律调整控件的位置,布局之内也可以放置布局,完成一些复杂的界面。常用的布局有以下五种:
LinearLayout——线性布局
RelativeLayout——相对布局
FrameLayout——帧布局
TableLayout——表格布局
AbsoluteLayout——绝对布局(基本不用)
4.0版本新特性:
GridLayout——网格布局

1.LinearLayout

线性布局,其中的控件会自动按照水平或垂直的方式依次排列。

(1)android:orientation属性:指定其排列方向,vertical代表垂直排列,horizontal代表水平排列,如果不定义的话,默认为horizontal。下面根据代码可以看看具体效果。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" //horizontal android:layout_width="match_parent" android:layout_height="match_parent">

    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button1"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button2"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button3"/>

</LinearLayout>

注释:wrap_content:表示控件占用自身大小的空间
match_parent:表示控件占满其父控件,在早期版本中叫做fill_parent

Android UI基础——五大布局_第1张图片

(2)android:layout_gravity属性
用来设置对齐方式的,可选值包括top, bottom, left , right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill , clip_vertical, clip_horizontal , start, end。根据意思可知道是怎样的对齐方式,此处不再进行代码以及图片展示了。
(3)android:layout_weight和weightSum属性
LinearLayout特有的属性。它表示比重的意思,可实现百分比布局
weight意义为控件按照比例分配父控件剩余控件,①如果两个控件的宽度都为match_parent,父控件的剩余控件为负数,按比例分配就会显示为反比例。②如果按照严格的比例分配的话请赋值为0dp。
weightSum意义为比重和,设置好总的比重份数,可以在子控件中设置占比重和的份数。代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" >

    <Button  android:layout_width="wrap_content" android:layout_height="0dp" android:text="Button1" android:layout_weight="3"/>
    <Button  android:layout_width="wrap_content" android:layout_height="0dp" android:text="Button2" android:layout_weight="1"/>

</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:weightSum="4" >

    <Button  android:layout_width="wrap_content" android:layout_height="0dp" android:text="Button1" android:layout_weight="1"/>
    <Button  android:layout_width="wrap_content" android:layout_height="0dp" android:text="Button2" android:layout_weight="2"/>

</LinearLayout>

Android UI基础——五大布局_第2张图片
(4)android:layout_marginxxx 和 android:layout_paddingxxx属性
xxx可代表:Bottom,End,Left, Right, Start, Top
margin表示的是view的边缘与临近控件的边缘的距离
padding 填充的意思,指的是view中的content与view边缘的距离。
简单地说,margin指的是外部离开的距离,padding指的是内部离开的距离。
(5)android:visibility属性
Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible (可见)”、“invisible(不可见)”、“gone(隐藏)”。主要用来设置控制控件的显示和隐藏。

2.RelativeLayout

相对布局中的视图组件是按相互之间的相对位置来确定的,四套相对属性,①相对父控件位置,②相对父控件居中方式,③相对子控件位置,④相对子控件边缘对齐
(1)android:layout_alignParentxxx(与父控件边缘对齐)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左上角" />
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右上角" android:layout_alignParentRight="true" android:layout_alignParentTop="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左下角" android:layout_alignParentBottom="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右下角" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="横向中心" android:layout_centerHorizontal="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="横向中心" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="纵向中心" android:layout_centerVertical="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="纵向中心" android:layout_centerVertical="true" android:layout_alignParentRight="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="中心" android:layout_centerInParent="true"/>

</RelativeLayout>

Android UI基础——五大布局_第3张图片
(2)android:layout_centerxxx(与父控件中心对齐)
(3)android:layout_toxxxof和android:layout_above(below)(子控件与子控件对齐
(2)(3)例结合在一起进行代码和图片的展示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">

    <Button android:id="@+id/buttonPanel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="目标控件" android:layout_centerInParent="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="目标控件上方" android:layout_above="@+id/buttonPanel" android:layout_centerHorizontal="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="目标控件下方" android:layout_below="@+id/buttonPanel" android:layout_centerHorizontal="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="目标控件右边" android:layout_toRightOf="@+id/buttonPanel" android:layout_centerVertical="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="目标控件左边" android:layout_toLeftOf="@+id/buttonPanel" android:layout_centerVertical="true"/>

</RelativeLayout>

Android UI基础——五大布局_第4张图片
(4)android:layout_alignxxx(子控件与子控件边缘对齐)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
    <Button  android:id="@+id/buttonPanel" android:layout_width="200dp" android:layout_height="200dp" android:text="目标控件" android:layout_centerInParent="true"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左边缘对齐" android:layout_alignLeft="@+id/buttonPanel"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右边缘对齐" android:layout_alignRight="@+id/buttonPanel"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上边缘对齐" android:layout_alignTop="@+id/buttonPanel"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="下边缘对齐" android:layout_alignBottom="@+id/buttonPanel"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="基准线对齐" android:layout_alignBaseline="@+id/buttonPanel"/>
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左下角对齐" android:layout_alignLeft="@+id/buttonPanel" android:layout_alignBottom="@+id/buttonPanel"/>
</RelativeLayout>

3.FrameLayout

帧布局中的每一个组件都代表一个画面,是一层一层覆盖的。
默认以屏幕左上角作为(0, 0)坐标,按组件定义的先后顺序依次逐屏显示,后面出现的会覆盖前面的画面。控件可以通过android:layout_gravity属性控制自己在父控件中的位置。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent">
    <Button  android:layout_width="200dp" android:layout_height="200dp" android:background="#005788"/>
    <Button  android:layout_width="100dp" android:layout_height="100dp" android:background="#991155" android:layout_gravity="bottom"/>
    <Button  android:layout_width="50dp" android:layout_height="match_parent" android:background="#eefd1d" />

</FrameLayout>

Android UI基础——五大布局_第5张图片

4.TableLayout

TableLayout属于行和列形式的管理控件,每行为一个TableRow对象,也可以是一个View对象。
在TableRow中还可以继续添加其他的控件,每添加一个子控件就成为一列。TableLayout不会生成边框。
(1)android:collapseColumns:隐藏某一列
(2)android:shrinkColumns=“0,1,2…”:收缩哪几列达到充满(用在所有列自适应超出屏幕)
(3)android:stretchColumns=“0,1,2…”:扩充哪几列(用在所在列自适应后未充满的情况)
(4)android:layout_span :跨列

5.AbsoluteLayout

因为该布局是采用坐标的形式来进行布局定位的,布局的dp都是固定的,以至于在不同分辨率的手机上显示的布局大小不同造成差异,因此Android中很少有采用这种布局方式的。

你可能感兴趣的:(android,UI,控件,界面)