Android系统定义了五种摆放控件的规则,它们都间接或者直接的继承自ViewGroup类。因此,我们也可以通过间接或者直接的继承方式来实现自定义控件摆放的规则。
1. 线性布局:LinearLayout
摆放方式有两种:
第一种:垂直放置(VERTICAL),相对水平放置来讲,垂直放置就相当于一列,放置的控件或者容器只能在该列中的某个位置,两个控件之间只存在上下方向的关系。当这一列放满后,再添加的控件就至于屏幕之外存在,无法看见。
第二种:水平放置(HORIZONTAL),指的是该容器里面存放的控件或者容器只能以一行的形式出现,放置的控件只能是该行中的某个位置,两个控件或者容器之间只有左右关系,当放置水平方向满屏时不会自动换行,再放置的控件将在屏幕之外存在,无法看见。
属性 | 说明 |
---|---|
android:orientation | 设置控件或者容器存放的方式 |
android:id | 设置控件id,方便在使用时引用 |
android:layout_width | 容器的宽度,该值必须设置 |
android:layout_height | 容器的高度,该值必须设置 |
android:layout_weight | 该属性针对其内的子控件,用来设置该控件或者容器占父控件或者容器的比例。 |
android:background | 设置背景 |
xmlns:android= "http://schemas.android.com/apk/res/android" | 设置该值表示可以当做一个布局文件,被Android系统解释使用,每个布局的根布局必须包含该属性,否则,系统将找不到该布局。 |
android:paddingLeft | 设置该layout的左内边距。 |
android:paddingRight | 设置该layout的右内边距。 |
android:paddingTop | 设置该layout的上内边距。 |
android:paddingBottom | 设置该layout的下内边距。 |
android:padding | 表示外边距,还有与内边距相类似的属性,分别为上,下,左,右外边距。 |
android:layout_margin | 设置该layout的四个方向内边距。 |
2. 相对布局:RelativeLayout
相对布局,是指利用控件之间的相对位置关系来对布局进行放置。
属性 | 说明 |
---|---|
android:layout_alignParentTop/Bottom/Left/Right=”true|false” | 是否和父控件的顶部/底部/左边/右边平齐 |
android:layout_centerInParent=”true|false” | 是否在父控件的中间位置 |
android:layout_centerInHorizontal/Vertical=”true|false” | 是否水平/垂直方向在父控件的中间 |
android:layout_alignTop/Bottom/Left/Right=”@id/xxx” | 与xxx的顶部/底部/左边/右边平齐(xxx代表控件或者容器的ID,可以是父控件的ID) |
android:layout_above/below=”@id/xxx” | 在xxx的上/下面,该控件的底部与xxx顶部平齐 |
android:layout_toRightOf/toLeftOf=”@id/xxx” | 在xxx的右/左边,该控件的左/右边与xxx的右/左边平齐 |
3. 帧布局:FrameLayout
帧布局,是指该容器内放置的控件或者容器没有上下左右的关系,只有层叠前后的关系。放置在容器内的控件按放置的前后顺序逐一层叠摆放,自然地后面摆放的控件就将前面摆放的控件覆盖了,叠在它的上面了。对于放置前后的关系,在没有设置其他属性之前,Android系统采用的是叠放的原则,即后加入节点的层叠在上面。设置属性android:bringToFront=“true|false”将前面放置的控件提到最前面可见。
4. TableLayout
表格布局,指该容器是一个表格,放置控件时,控件的位置坐落在表格的某个位置上。其中TableRow是配合TableLayout使用的,目的是为了让TableLayout生成多个列,否则TableLayout中就只能存在一列元素,但可以有多行。
TableLayout的直接父类是LinearLayout,所以其具有LinearLayout的属性,TableLayout中的每一行用TableRow表示,每一列就是TableRow中的个数指定的。TableRow的直接父类是LinearLayout,但是其放置的方式只能水平放置。
属性 | 说明 |
---|---|
android:stretchColumns="1" | 设置 TableLayout所有行的第二列为扩展列。也就是说如果每行都有三列的话,剩余的空间由第二列补齐,第一行的索引号为0 |
android:shrinkColumns="" | 以第0行为序,自动拓宽指定的列填充可用部分:当TableRow里面的控件还没有布满局时,shrinkColumns不起作用 |
android:collapseColumns="" | 以第0行为序,隐藏指定的列,可设置多个值,用逗号隔开“0,2”表示隐藏第1和第3列 |
4. TableLayout
绝对布局,是指以屏幕左上角为坐标原点(0,0),控件在容器中的位置以坐标的形式存在,可以随意指定控件的坐标位置,非常灵活。在开发过程中很少使用,原因是屏幕兼容性不好,不便控制两个控件之间的位置。其中控件或者容器放置的位置通过android:layout_x和android:layout_y这两个属性进行设置。
☆☆☆Android Studio实现使用LinearLayout的使用
1.打开Android Studio,新建工程后,在activity_main.xml中,编写代码。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/holo_blue_dark">
<LinearLayout
android:id="@+id/layout_1"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="50dip">
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_gravity="center"
android:paddingLeft="10dip"
android:text="登录"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout_2"
android:layout_margin="10dip"
android:minHeight="165dip"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="fill_parent"
android:layout_height="50dip"
android:hint="手机号"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dip"
android:layout_marginTop="10dip"
android:id="@+id/name"
android:singleLine="true"
android:paddingLeft="10dip"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="50dip"
android:hint="密码"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_below="@+id/name"
android:paddingLeft="10dip"/>
<LinearLayout
android:id="@+id/layout_3"
android:layout_marginTop="5dip"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_width="match_parent"
android:layout_height="40dip"
android:weightSum="11">
<TextView
android:text="注册"
android:textColor="#7089c0"
android:textSize="18sp"
android:gravity="center_vertical"
android:layout_weight="10"
android:layout_width="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/signin"
android:layout_height="match_parent" />
<Button
android:layout_weight="1"
android:minWidth="80dip"
android:layout_height="40dip"
android:text="登录"
android:textColor="#fff"
android:textSize="18sp"
android:id="@+id/login"
android:layout_width="wrap_content"
android:background="@android:color/darker_gray" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
2.在MainActivity.java中,编写相关代码。
package com.example.linearlayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_layout);
}
}
运行结果:
☆☆☆Android Studio实现使用RelativeLayout的使用
1.打开Android Studio,新建工程后,在activity_main.xml中,编写代码。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/holo_green_dark">
<RelativeLayout
android:id="@+id/layout_1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_width="fill_parent"
android:layout_height="50dip">
<TextView
android:textAppearance="?android:attr/textAppearanceLarge"
android:id="@+id/textview1"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_marginLeft="10dip"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:text="登录"
android:layout_height="wrap_content" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/layout_2"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_marginTop="10dip"
android:minHeight="165dip"
android:layout_below="@id/layout_1"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:layout_width="fill_parent"
android:layout_height="50dip"
android:hint="手机号"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dip"
android:layout_marginTop="10dip"
android:id="@+id/name"
android:singleLine="true"
android:paddingLeft="10dip"/>
<EditText
android:layout_width="fill_parent"
android:layout_height="50dip"
android:hint="密码"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:id="@+id/password"
android:password="true"
android:singleLine="true"
android:layout_below="@+id/name"
android:paddingLeft="10dip"/>
<Button
android:layout_height="40dip"
android:layout_width="wrap_content"
android:minWidth="100dip"
android:layout_marginLeft="0dip"
android:layout_marginRight="2dip"
android:layout_marginTop="5dip"
android:layout_marginBottom="10dip"
android:text="登录"
android:textColor="#fff"
android:textSize="18sp"
android:id="@+id/login"
android:layout_alignRight="@id/password"
android:layout_below="@id/password"
android:onClick="onLoginClick"
android:background="@android:color/darker_gray" />
<TextView
android:layout_height="40dip"
android:layout_width="wrap_content"
android:clickable="true"
android:layout_marginTop="5dip"
android:layout_marginBottom="10dip"
android:text="注册"
android:textColor="#7089c0"
android:textSize="18sp"
android:paddingLeft="5dip"
android:gravity="center_vertical"
android:id="@+id/signin"
android:layout_below="@id/password"
android:onClick="onLoginClick"
android:layout_alignLeft="@id/password"
android:layout_toLeftOf="@id/login"/>
</RelativeLayout>
</RelativeLayout>
2.在MainActivity.java中,编写相关代码。
package com.example.relativelayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
运行结果:
☆☆☆Android Studio实现使用TableLayout的使用
1.打开Android Studio,新建工程后,在activity_main.xml中,编写代码。
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/holo_purple">
<TableRow
android:id="@+id/layout_1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TextView
android:text="登录"
android:layout_height="47dip"
android:textAppearance="?android:attr/textAppearanceMedium"
android:layout_gravity="center_vertical"
android:paddingLeft="10dip"
android:id="@+id/textview1"
android:layout_width="wrap_content"
/>
</TableRow>
<TableRow
android:id="@+id/layout_2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TableLayout
android:id="@+id/layout_3"
android:layout_weight="1"
android:minHeight="165dip"
android:layout_margin="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TableRow
android:id="@+id/Row1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<EditText
android:inputType="number"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:layout_marginTop="10dip"
android:id="@+id/name"
android:layout_weight="1"
android:singleLine="true"
android:hint="手机号"
android:paddingLeft="10dip"
android:layout_height="50dip"
android:layout_width="fill_parent"
/>
</TableRow>
<TableRow
android:id="@+id/Row2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<EditText
android:inputType="textPassword"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"
android:id="@+id/password"
android:layout_weight="1"
android:singleLine="true"
android:hint="密码"
android:password="true"
android:paddingLeft="10dip"
android:layout_height="50dip"
android:layout_width="fill_parent"
/>
</TableRow>
<TableRow
android:id="@+id/Row3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"
android:minWidth="100dip"
android:layout_marginRight="10dip"
android:layout_marginTop="5dip"
>
<TextView
android:text="注册"
android:textColor="#7089c0"
android:textSize="18sp"
android:gravity="center_vertical"
android:layout_weight="10"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/textview2"
/>
<Button
android:layout_weight="1"
android:minWidth="80dip"
android:layout_height="40dip"
android:text="登录"
android:textColor="#fff"
android:textSize="18sp"
android:id="@+id/login"
android:layout_width="wrap_content"
/>
</TableRow>
</TableLayout>
</TableRow>
</TableLayout>
2.在MainActivity.java中,编写相关代码。
package com.example.tablelayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
运行结果:
这就是布局管理器Layout的简单使用,如果转载以及CV操作,请务必注明出处,谢谢!