Android基础知识点整理
一、Android六大布局
1.1 LinearLayout线性布局
android:orientation属性是LinearLayout中特有的属性,通过指定vertical可控制布局纵向排列,指定horizontal控制布局横向排列
android:layout_weight指定子元素在LinearLayout中所占的权重
1.2 RelativeLayout相对布局
RelativeLayout里设为boolean的XML属性
android:layout_centerHorizontal
android:layout_centerVertical
android:layout_centerParent
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight
android:layout_alignParentTop
RelativeLayout.里属性值为其他组件ID的XML属性
android:layout_toRightOf
android:layout_toLeftOf
android:layout_above
android:layout_below
android:layout_alignTop
android:layout_alignBottom
android:layout_alignRight
android:layout_alignLeft
1.3 FrameLayout帧布局
FrameLayout直接继承自ViewGroup组件。帧布局为每个加入其中的组件创建一个空白的区域(称为一帧),每个子组件占据一帧,这些帧会根据gravity属性执行自动对齐。
1.4 AbsoluteLayout绝对布局
AbsoluteLayout由开发人员自己通过X坐标、Y坐标来控制组件的位置。每个组件都可指定如下两个XML属性:
layour_x;
layout_y;
由于该模式,无法适配不同屏幕大小的机型,现已被淘汰
1.5 TableLayout表格布局
TableLayout继承自Linearout,本质上仍然是线性布局管理器。表格布局采用行、列的形式来管理UI组件,并不需要明确地声明包含多少行、多少列,而是通过添加TableRow、其他组件来控制表格的行数和列数。
每向TableLayout中添加一个TableRow就代表一行;
每向TableRow中添加一个一个子组件就表示一列;
如果直接向TableLayout添加组件,那么该组件将直接占用一行;
在表格布局中,可以为单元格设置如下三种行为方式:
Shrinkable:该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度;
Strentchable:该列所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间;
Collapsed:如果该列被设置为Collapsed,那么该列的所有单元格会被隐藏;
1.6 GridLayout网格布局
GridLayout是Android4.0增加的网格布局控件,与之前的TableLayout有些相似,它把整个容器划分为rows ×columns个网格,每个网格可以放置一个组件。性能及功能都要比tablelayout好,比如GridLayout布局中的单元格可以跨越多行,而tablelayout则不行,此外,其渲染速度也比tablelayout要快。
GridLayout提供了setRowCount(int)和setColumnCount(int)方法来控制该网格的行和列的数量
二、Activity
2.1.Activity生命周期
通过activity的生命周期,我们可以将activity分为四种状态,分别为活动、暂停、停止、销毁
①activity启动
onCreate ——> onStart ——> onResume
②activity暂停
按下home键,执行onPause ——> onStop
③点击home键回到程序界面
onRestart ——> onStart ——> onResume
④退出当前Activity
onPause ——> onStop ——> onDestory
2.2 Activity启动模式
首先明确任务栈的概念,开启一个activity就叫进栈,关闭一个activity就叫出栈;用户操作的activity永远位于栈顶,程序一旦退出了任务栈也就被清空了,一般来说一个应用程序对应一个任务栈。
①standard
activity默认启动模式,每启动一个activity就会创建一个新的实例。
应用场景:闹钟
②singleTop
栈顶复用模式,首先检查任务栈的栈顶,要创建的activity在栈顶已经存在的话,则直接复用,否则依然会重新创建。
应用场景:浏览器的书签
③singleTask
栈内复用模式,首先检查任务栈内是否有实例存在,如果存在该实例,就把这个activity上面的所有别的activity实例都清空掉,再复用这个已经存在的实例
应用场景:浏览器
④singleInstance
单一实例,每一个activity都独享一个任务栈,系统会自动创建一个任务栈。
应用场景:来电页面
三、Service
service是Android后台组件,和activity一样有自己的生命周期,没有用户界面;Android中分为两种service:Service以及IntentService,并且service有两种启动模式,不同启动模式,其生命周期也不相同。
3.1 IntentService特征
①IntentService会创建一个单独的worker线程来处理所有的intent请求
②IntentService只需要实现onHandIntent()方法
③当所有的请求处理完成后,IntentService会自动停止
3.2 Service
3.2.1 启动方式
①startService启动service
访问者与Service没有关联,访问者退出了,Service仍然在后台运行,可通过调用stopSelf()来停止服务,或者是调用stopService来停止服务,且这种方式无法进行通信以及交换数据
生命周期为:onCreate() ——>onstartCommand()——>onDestory()
②IntentService启动service
访问者与service绑定在一起,当访问者被销毁时,服务也会被销毁;方便访问者与Service之间进行通信和交换数据
生命周期为:onCreate()——>onBind()——>onUnbind()——>onDestory()
四、BroadcastReceiver
BroadcastReceiver本质上是一个全局的监听器,用于监听全局的广播消息,可以很方便的实现不同组件间的通信
启动方式sendBroadcast(),可静态注册(在清单文件中)、动态注册(代码)
五、ContentProvider
ContentProvider将数据进行封装,其他应用可通过内容解析者(ContentResolver)来访问。
实现步骤:
①定义一个类实现ContentProvider
②在清单文件中进行配置,加入authorities属性
③定义路径匹配器UriMactcher
④写一个静态代码块,添加匹配规则
⑤暴露方法(增删改查)
六、fragment
fragment即碎片,它必须依附于activity而存在,其生命周期受activity所影响,可通过静态加载(在布局中加载)、动态加载(代码实现)到相应的activity上,一个activity里面可以包含多个fragment,一个fragment也可以被多个activity重用。
6.1 fragment加载方式
6.1.1 静态加载
在需要加载该fragment的activity的布局文件中通过上述方式加载.
6.1.2 动态加载
七. 动画
7.1 View Animation
View Animation也叫做Tween,补间动画,可进行缩放,位移,旋转,透明等变换.
7.2 Drawable Animation
Drawable Animation也叫Frame,帧动画.
7.3 Property Animation
Property Animation 也叫做属性动画,其原理是修改控件的属性值来实现的动画.