布局是一种可以放置很多控件的容器,在容器中的控件会按照容器规定的布局规则来放置自己,系统有很多这样的容器,但是最基本的布局只有几种,下面我们就来依次学习.
1.LinearLayout
线性布局:它所包含的控件会按照线性方向放置,它可以设置两种方向,水平和垂直,当然还有一个重要的layout_weight属性,会按照指定的比例来设置大小,在适配上起到很大的作用.
垂直方向:设置的上下布局属性没有作用.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.dwj.demob.MainActivity">
<Button
android:layout_gravity="start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="first" />
<Button
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="second" />
<Button
android:layout_gravity="end"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="third" />
</LinearLayout>
效果:
2017-10-21 21-03-42屏幕截图.png水平方向:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.dwj.demob.MainActivity">
<Button
android:layout_gravity="top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="first" />
<Button
android:layout_gravity="center_vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="second" />
<Button
android:layout_gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="third" />
</LinearLayout>
效果:
2017-10-21 21-07-37屏幕截图.pnglayout_weight属性:用屏幕的剩余空间来按比例分配控件的大小
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context="com.dwj.demob.MainActivity">
<Button
android:layout_gravity="top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="first" />
<EditText
android:layout_marginStart="5dp"
android:layout_weight="2"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</LinearLayout>
效果:
2017-10-21 21-11-20屏幕截图.png2,RelativeLayout:
相对布局:没有指定特殊的排列方式,位置的定位是相对某一个目标来设定,比如相对于父控件,或者相对于某一个子控件.在没有指定相对位置的情况下,子控件重叠放置.
相对目标设定为父控件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.dwj.demob.ActivityA">
<Button
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="center" />
<Button
android:layout_alignParentTop="true"
android:layout_alignParentStart="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="topStart" />
<Button
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="topEnd" />
<Button
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BottomStart" />
<Button
android:layout_alignParentBottom="true"
android:layout_alignParentEnd="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BottomEnd" />
</RelativeLayout>
效果:
2017-10-21 22-23-46屏幕截图.png
相对目标设置为某一个子控件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.dwj.demob.ActivityA">
<Button
android:id="@+id/center"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="center" />
<Button
android:id="@+id/topStart"
android:layout_toStartOf="@id/center"
android:layout_above="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="topStart" />
<Button
android:id="@+id/topEnd"
android:layout_toEndOf="@id/center"
android:layout_above="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="topEnd" />
<Button
android:layout_below="@id/center"
android:layout_alignStart="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="below" />
<Button
android:layout_below="@id/topEnd"
android:layout_toEndOf="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="right" />
<Button
android:layout_below="@id/topStart"
android:layout_toStartOf="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="left" />
<Button
android:layout_above="@id/center"
android:layout_alignStart="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="top" />
<Button
android:layout_toStartOf="@id/center"
android:layout_below="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BotStart" />
<Button
android:layout_below="@id/center"
android:layout_toEndOf="@id/center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BotEnd" />
</RelativeLayout>
效果图:
2017-10-21 22-44-38屏幕截图.png3,FrameLayout:
帧布局:子控件的默认布局是重叠在一起.定义布局的属性和相对布局相似,使用场景主要是作为放置fragment的容器,因为是和相对布局设置相似,就不贴代码了.
4,TableLayout:
表格布局:子节点是TableRow,每一个子节点表示一行,并且子节点中的控件不能设置宽度.
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="1" //拉伸的行数,自适应屏幕宽度
tools:context="com.dwj.demob.ActivityC">
<TableRow>
<TextView
android:layout_width="wrap_content"
android:text="Account"/>
<EditText
android:hint="input account"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<TextView
android:text="PassWord"
android:layout_height="wrap_content"/>
<EditText
android:hint="input pass word"
android:layout_height="wrap_content"/>
</TableRow>
<TableRow>
<Button
android:layout_span="2" //合并单元格
android:text="enter"
android:layout_height="wrap_content"/>
</TableRow>
</TableLayout>
效果:
2017-10-21 23-12-56屏幕截图.png5,Percent:
百分比布局:这是support包新添加的布局,综合类似线性布局的weight属性同时也有相对布局属性的布局,可以直接设定控件占屏幕的百分比大小,需要在build gradle中引入:compile 'com.android.support:percent:24.2.1'
<?xml version="1.0" encoding="utf-8"?>
<android.support.percent.PercentRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.dwj.demob.ActivityD">
<Button
android:layout_alignParentStart="true"
android:text="first"
android:gravity="center"
app:layout_widthPercent ="20%"
android:layout_height="wrap_content"/>
<Button
android:layout_alignParentEnd="true"
android:text="second"
android:gravity="center"
app:layout_widthPercent ="80%"
android:layout_height="wrap_content"/>
</android.support.percent.PercentRelativeLayout>
效果图:
2017-10-21 23-39-56屏幕截图.png当然还有PercentFrameLayout控件,布局功能和PercentRelativeLayout相似.
以上就是Android中常用的几种布局的用法.
网友评论