一、自定义控件
1.px、dp和sp的关系
px:像素点,在web前段会用得比较多,但是对于移动端尽量少用,因为手机的分辨率是不同的;
dp:跟像素密度有关,因为密度的不同会导致相同的px,而dp不同的情况;
sp:和dp类似,但是是用来修饰文字的;
2.Inflater的基本知识
对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;而对于一个已经加载了的界面,就可以使用Activity.findViewById()来获得其中的界面元素。
LayoutInflater是一个抽象类,public abstract class LayoutInflater extends Objects;
获得LayouInflater的三种方式:
1)LayoutInflater inflater = getLayoutInflater();
2)LayoutInflater localinflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
3.)LayoutInflater inflater = LayoutInflater.from(context);
我们主要使用的还是第二种方式,因为三种方式中归根结底,都是来自第二种。
3.View的工作过程
自定义控件的流程一般是按照下面的方法进行的:
1)自定义view的属性,创建attrs.xml,创建自己想要的属性;
2)在view的构造方法中获取我们自定义的控件;
3)重写onMesure(),以确定大小;
4)重写onLayout(),以确定位置;
5)重写onDraw(),以绘制图形;
6)invalidate,刷新。
自定义控件的三种方式:
通过继承已有的控件来自定义控件
通过继承一个布局文件来实现自定义控件
通过继承View类来实现自定义控件
二、Fragment的学习
1.什么是fragment?
Fragment是Activity中的一部分
多个Fragment可以组合到一个Activity中
多个Activity可以重用一个Fragment
总结:Fragment相当于模块化的一段activity,具有自己的生命周期,接受自己的事件。可以在activity运行时被添加或删除
2.Fragment的生命周期
通过图表的方式表示:
在上面的流程图中,有很多地方和Activity的生命周期较为类似,但是也有很多不同之处。其中比较重要的是onCreateView。
三、Handler的学习
1.多线程和异步
多线程是指从软件或者硬件上实现多个线程并发执行的技术,一个进程中有多个任务,每个任务就是一个线程,当一起执行的时候就需要异步执行。
2.Handler的基本概念
Handler的主要作用是用来处理异步的消息,可以用来传递Message和Runnable的对象
3.Looper
消息泵,是消息队列(Message queue)的管理者,每一个looper对象和一个线程关联,looper负责取出消息,然后交给Handler处理。
4.Message
Message的主要方法如下:
obtainMessage()取得消息
sendMessage() 发送
handlerMessage() 处理消息