在Android应用程序中,界面由布局和控件组成。布局如框架,控件如砖瓦。
View控件
Android所有的UI元素都是通过View控件和ViewGroup容器构建的。在一个应用程序中ViewGroup容器可以包含普通的View控件,也可以包含ViewGroup容器。
注意!Android应用程序中的每个界面必须有且只有一个ViewGroup容器
界面布局的编写方式
在XML布局文件中编写布局
直接在res/layout文件夹下的activity_main.xml文件中编写。如图将根标签中更改为要使用的界面布局即可。
<?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=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:textColor="#f00"
android:textSize="18sp"
app:layout_centerInParent="true"/>
</RelativeLayout>
在java代码中编写布局
Android中所有的布局和控件的对象都可通过new关键字创建,将创建的View控件添加到ViewGroup容器中,就能在布局界面中显示View控件。如:
RelativeLayout relativeLayout=new RelativeLayout(this)
RelativeLayout.LayoutParams params=new RelativeLayout.LayoutParams{
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.Wrap_CONTENT);
//addRule参数对应RelativeLayout的XML布局属性
TextView textView=new TextView(this); //创建TextView控件
textView.setText("Hello Word!"); //设置TextView控件的文字内容
//添加TextView对象和TextView布局属性
relativeLayout.addView(textView, params);
setContView(relativeLayout); //设置在Activity中显示RelativeLayout
不管用那种方式编写布局,它们控制的的界面行为本质是一样的
界面布局的通用属性
android:id 设置布局的标识,当前布局的唯一标识,在XML中通过"@+id/属性名称"定义。
在java代码中通过findViewById()方法传入该int值获取布局对象
android:layout_width 设置布局宽度
fill_parent: | 表示该布局的宽度与父容器的宽度相同 |
match_parent | 与fill_parent作用相同,推荐使用fill_parent |
wrap_content | 表示该布局的宽度能恰好包裹它的内容 |
android:layout_height 设置布局高度
fill_parent: | 表示该布局的宽度与父容器的高度相同 |
match_parent | 与fill_parent作用相同,推荐使用fill_parent |
wrap_content | 表示该布局的宽度能恰好包裹它的内容 |
android:background 设置布局的背景,可引用图片颜色资源
android:layout_margin 设置当前布局与屏幕边界,周围布局与控件的距离
相似的还有layout_marginTop,layout_marginButtom,layout_marginRight,layout_marginLeft
android:padding 设置当前布局与该布局中空间的距离
相似的还有paddingTop,paddingButtom,paddingLeft,paddingRight,
线性布局
线性布局LinearLayout,线性布局内的子控件通常被指定为水平或竖直排序。
线性布局中常用的两个属性
android:orientation 设置布局内的控件排列顺序,可选值vertical和horizontal
vertical | 表示LinearLayout内控件从上到下依次竖直排序 |
horizontal | 表示LinearLayout内控件从左到右依次水平排序 |
android:layout_weight 在布局内设置控件权重,属性值可直接写int值,通过设置权重使布局内的控件按照权重比显示大小
相对布局
相对布局RelativeLayout通过相对定位来指定子控件的位置,
常用的子控件属性表
android:layout_centerlnParent | 设置当前控件位于父布局的中央位置 |
android:layout_ceneterVertical | 设置当前控件位于父布局的垂直居中位置 |
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 | 设置当前控件的右边界与某控件的右边界对齐 |
表格布局
表格布局TableLayout用行列的形式来管理控件,可通过TableRow布局或控件来控制表格的行数,在TableRow布局中添加控件来控制表格的列数。
TableLayout继承自LinearLayout,所以它支持LinearLayout的所有属性,此外还有其他常用属性
android:stretchColumns | 设置可拉伸的列; 当android:stretchColumns="0"则第一列可拉伸 |
android:shrinkColumns | 设置可收缩的列。 |
android:collapseColumns | 设置可隐藏的列 |
常用的控件属性
android:layout_coulmn | 设置该控件显示的位置, 当android:layout_coulmn="0"则在第2个位置显示 |
android:layout_span | 设置该控件占据几列,默认为1列 |
在TableLayout中,列的宽度由该列中最宽的那个单元格(控件)决定,整个的宽度取决于父容器
帧布局
帧布局FrameLayout创建一块空白区域,添加到该区域的每一个字控件占一帧,帧会一个一个叠加到一起,后加入的控件会叠加到上一个控件的上层,默认时所有控件会与布局的左上角对齐。
特殊属性
android:foreground | 设置FrameLayout容器的前景图像(始终在所有子控件之上) |
android:foregroundGravity | 设置前景图像显示的位置 |