Android常见界面布局
1.View视图
Android中所有的UI元素都是通过View与ViewGroup构建的,对于一个Android应用用户界面,ViewGroup作为容器盛装界面中的控件,它可以包含普通的View控件,也可以包含ViewGroup。
2.界面布局编写方式
2.1编写方式
在XML文件中编写布局:推荐此种方式(高内聚,低耦合)
有效的将界面中的布局代码与Java代码隔离,使程序结构更加清晰
在Java代码中编写布局
在Android中所有布局和控件的对象可以通过new关键字创造出来,将创建的View控件添加到ViewGroup布局中,从而实现View控件在布局界面中显示
2.2具体实现
2.2.1XML文件中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="使用XML布局文件控制UI界面"
android:textColor="#ff0000"
android:textSize="18sp"
android:layout_centerInParent="true"/>
</RelativeLayout>
2.2.2Java代码
RelativeLayout relativeLayout = new RelativeLayout(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_IN_PARENT); //设置布局中的控件居中显示
TextView textView = new TextView(this); //创建TextView控件
textView.setText("Java 代码实现界面布局"); //设置TextView的文字内容
textView.setTextColor(Color.RED); //设置TextView的文字颜色
textView.setTextSize(18); //设置TextView的文字大小
relativeLayout.addView(textView, params); //添加TextView对象和TextView的布局属性
setContentView(relativeLayout); //设置在Activity中显示RelativeLayout
3.界面布局的通用属性
3.1常用布局
布局名称 | 特点 |
---|---|
线性布局 | 以水平或垂直方向排列 |
相对布局 | 通过相对定位排列 |
帧布局 | 开辟空白区域,帧里的控件叠加 |
表格布局 | 表格形式排列 |
3.2通用属性
属性名称 | 功能描述 |
---|---|
android:id | 设置布局的标识 |
android:layout_width | 设置布局的宽度 |
android:layout_height | 设置布局的高度 |
android:background | 设置布局的背景 |
android:layout_margin | 设置布局与屏幕边界或与周围控件的距离 |
android:layout_padding | 设置当前布局与该布局中控件的距离 |
4.线性布局
4.1定义
指定布局内的子控件水平或竖直排列
语法格式
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 属性 = "属性值" ......>
</LinearLayout>
4.2特殊属性
属性名称 | 功能描述 |
---|---|
android:orientation | 设置布局内控件的排列顺序 |
android:layout_weight | 在布局内设置控件权重,属性值可直接写int值 |
属性android:orientation的值为可选值,可选值为vertical和horizontal。
(1) vertical:表示LinearLayout布局内控件依次从上到下竖直排列。
(2)horizontal:表示LinearLayout布局内控件依次从左到右水平排列。
属性android:layout_weight:
(1)该属性被称为权重,通过设置该属性值,可使布局内的控件按照权重比显示大小。
(2)在进行屏幕适配时起到关键作用。
4.3补充
LinearLayout布局中的android:layout_width属性值不可设为wrap_content。因为LinearLayout的优先级比Button高,如果设置为wrap_content,则Button控件的android:layout_weight属性会失去作用。
注意:当控件使用权重属性时,布局宽度属性值通常设置为0dp。
5.相对布局
5.1定义
RelativeLayout(相对布局)通过相对定位的方式指定子控件的位置。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
属性 = "属性值"
......>
</RelativeLayout>
5.2子控件属性
属性名称 | 功能描述 |
---|---|
android:layout_centerInParent | 设置当前控件位于父布局的中央位置 |
android:layout_centerVertical | 设置当前控件位于父布局的垂直居中位置 |
android:layout_centerHorizontal | 设置当前控件位于父控件的水平居中位置 |
android:layout_above | 设置当前控件位于某控件上方 |
android:layout_below | 设置当前控件位于某控件下方 |
android:layout_toLeftOf | 设置当前控件位于某控件左侧 |
android:layout_toRightOf | 设置当前控件位于某控件右侧 |
android:layout_alignParentTop | 设置当前控件是否与父控件顶端对齐 |
android:layout_alignParentLeft | 设置当前控件是否与父控件左对齐 |
android:layout_alignParentRight | 设置当前控件是否与父控件右对齐 |
android:layout_alignParentBottom | 设置当前控件是否与父控件底端对齐 |
android:layout_alignTop | 设置当前控件的上边界与某控件的上边界对齐 |
android:layout_alignBottom | 设置当前控件的下边界与某控件的下边界对齐 |
android:layout_alignLeft | 设置当前控件的左边界与某控件的左边界对齐 |
android:layout_alignRight | 设置当前控件的右边界与某控件的右边界对齐 |
6.表格布局
6.1定义
TableLayout(表格布局)采用行、列的形式来管理控件,通过在TableLayout布局中添加TableRow布局或控件来控制表格的行数,可以在TableRow布局中添加控件来控制表格的列数。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性 = "属性值">
<TableRow>
UI控件
</TableRow>
UI控件
......
</TableLayout>
6.2属性
表格布局属性
属性名称 | 功能描述 |
---|---|
android:stretchColumns | 设置该列被拉伸 |
android:shrinkColumns | 设置该列被收缩 |
android:collapseColumns | 设置该列被隐藏 |
表格布局中控件的常用属性
属性名称 | 功能描述 |
---|---|
android:layout_column | 设置该单元显示位置 |
android:layout_span | 设置该单元格占据几行,默认为1行 |
7.帧布局
7.1定义
FrameLayout(帧布局)用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中的所有控件会与左上角对齐。在XML布局文件中定义FrameLayout的基本语法格式如下所示。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
属性 ="属性值">
</FrameLayout>
7.2属性
属性名称 | 功能描述 |
---|---|
android:foreground | 设置帧布局容器的前景图像(始终在所有子控件之上) |
android:foregroundGravity | 设置前景图像显示的位置 |