Android Activity介绍
1. 介绍
本文介绍了Android四大组件之一的Activity
2. 生命周期
Activity的生命周期图如下所示
Activity生命周期的几个过程如下:
1. 启动Activity:系统会先调用onCreate方法, 然后调用onStart方法, 最后调用onResume, Activity进入运行状态 2. 当前Activity被其他Activity覆盖其上或被锁屏: 系统会调用onPause方法, 暂停当前Activity的执行 3. 当前Activity由被覆盖状态回到前台或解锁屏: 系统会调用onResume方法, 再次进入运行状态 4. 当前Activity转到新的Activity界面或按Home键回到主屏, 自身退居后台: 系统会先调用onPause方法, 然后调用onStop方法, 进入停滞状态 5. 用户后退回到此Activity: 系统会先调用onRestart方法, 然后调用onStart方法, 最后调用onResume方法, 再次进入运行状态 6. 当前Activity处于被覆盖状态或者后台不可见状态, 即第2步和第4步, 系统内存不足, 杀死当前Activity, 而后用户退回当前Activity: 再次调用onCreate方法、onStart方法、onResume方法, 进入运行状态 7. 用户退出当前Activity: 系统先调用onPause方法, 然后调用onStop方法, 最后调用onDestory方法,结束当前Activity
更多信息, 参考<基础总结篇之一:Activity生命周期>
3. Activity布局
3.1 布局种类
Activity有如下布局
线性布局(LinearLayout)
表格布局(TableLayout)
相对布局(RelativeLayout)
绝对布局(AbsoluteLayout) - Deprecated since API level 3
框架布局(FrameLayout)
网格布局(GridLayout) - Added in API level 14
约束布局(ConstraintLayout) - Added in API level 9
TIP: 这些布局都可以嵌套使用
3.2 基本属性
布局文件都有两个最基本的属性, 宽和高
android:layout_width match_parent/wrap_content --- 设置控件宽度
android:layout_height match_parent/wrap_content --- 设置控件高度
对于主布局文件, 通常设置为match_parent, 表示适应整个屏幕
注意: Android 2.2 之前使用的是fill_parent, 如今google建议使用match_parent.
其他常用公共属性如下:
android:layout_gravity bottom/center/... --- 设置该控件相对与父控件的位置 android:layout_margin+方位 固定值px --- 设置控件边缘相对父控件的边距 android:padding+方位 固定值px --- 设置控件内容相对本控件边缘的边距 android:background 固定值 --- 设置控件的背景
/* Android 4.2引入 */
android:layoutDirection inherit/locale --- 设置组件的布局排列方向
android:textDirection inherit/locale --- 设置组件的文字排列方向
android:textAlignment gravity/center --- 设置文字的对齐方式
更多属性, 参考<Android layout属性大全>
3.3 线性布局
线性布局(LinearLayout)就是将各种控件按照行或者列依次进行排列
布局属性:
android:orientation vertical/horizontal --- 设置布局的排列方向
控件属性:
android:gravity bottom/center/... --- 设置控件内容的位置
android:layout_weight Integer --- 设置控件所占空间的权重
实例请参考: <Activity线性布局和表格布局>, <android的布局-LinearLayout(线性布局)>
3.4 表格布局
表格布局(TableLayout)以行列的形式管理子控件, 每一行为一个TableRow的对象或者一个控件的对象
TableRow可以添加子控件, 每添加一个代表一列
TIP: 表格布局继承自线性布局
布局属性:
/* 列从0开始, 多个列的话用","分隔 */
android:collapseColumns --- 设置需要被隐藏的列
android:shrinkColumns --- 设置允许被收缩的列
android:stretchColumns --- 设置允许被拉伸的列
控件属性:
android:layout_column --- 设置该控件在TableRow中所在列。
android:layout_span --- 设置该控件所跨越的列数
实例请参考: <TableLayout(表格布局)>, <android的布局-TableLayout(表格布局)>
3.5 相对布局
相对布局(RelativeLayout)是一种以控件之间相对位置或相对父容器位置进行排列的布局方式.
控件属性:
/* 控件相对控件位置, 值是另外一个控件ID */
android:layout_above --- 位于给定控件之上
android:layout_below --- 位于给定控件之下
android:layout_toLeftOf --- 位于给定控件左边
android:layout_toRightOf --- 位于给定控件右边
android:layout_alignLeft --- 左边与给定ID控件的左边对齐
android:layout_alignRight --- 右边与给定ID控件的右边对齐
android:layout_alignTop --- 上边与给定ID控件的上边对齐
android:layout_alignBottom --- 底边与给定ID控件的底边对齐
android:layout_alignBaseline --- 对齐到控件基准线
/* 控件相对父容器位置, 值是true或false */
android:layout_alignParentLeft --- 相对于父靠左
android:layout_alignParentTop --- 相对于父靠上
android:layout_alignParentRight --- 相对于父靠右
android:layout_alignParentBottom --- 相对于父靠下
android:layout_centerInParent --- 相对于父即垂直又水平居中
android:layout_centerHorizontal --- 相对于父即水平居中
android:layout_centerVertical --- 相对于父即处置居中
/* Android 4.2以上新属性, 值是另外一个控件ID */
android:layout_alignStart --- 将控件对齐给定ID控件的头部
android:layout_alignEnd --- 将控件对齐给定ID控件的尾部
android:layout_alignParentStart --- 将控件对齐到父控件的头部
android:layout_alignParentEnd --- 将控件对齐到父控件的尾部
更多信息, 参考<Android 相对布局>, <android的布局-RelativeLayout(相对布局)>
参考:
<GridLayout(网格布局)>
<FrameLayout(帧布局)>
<Android ConstraintLayout详解>
<Android五大布局介绍&属性设置大全>