一、自定義控件
1.px、dp和sp的關(guān)系
px:像素點(diǎn),在web前段會(huì)用得比較多,但是對(duì)于移動(dòng)端盡量少用,因?yàn)槭謾C(jī)的分辨率是不同的;
dp:跟像素密度有關(guān),因?yàn)槊芏鹊牟煌瑫?huì)導(dǎo)致相同的px,而dp不同的情況;
sp:和dp類似,但是是用來(lái)修飾文字的;
2.Inflater的基本知識(shí)
對(duì)于一個(gè)沒(méi)有被載入或者想要?jiǎng)討B(tài)載入的界面,都需要使用LayoutInflater.inflate()來(lái)載入;而對(duì)于一個(gè)已經(jīng)加載了的界面,就可以使用Activity.findViewById()來(lái)獲得其中的界面元素。
LayoutInflater是一個(gè)抽象類,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);
我們主要使用的還是第二種方式,因?yàn)槿N方式中歸根結(jié)底,都是來(lái)自第二種。
3.View的工作過(guò)程
自定義控件的流程一般是按照下面的方法進(jìn)行的:
1)自定義view的屬性,創(chuàng)建attrs.xml,創(chuàng)建自己想要的屬性;
2)在view的構(gòu)造方法中獲取我們自定義的控件;
3)重寫onMesure(),以確定大小;
4)重寫onLayout(),以確定位置;
5)重寫onDraw(),以繪制圖形;
6)invalidate,刷新。
自定義控件的三種方式:
通過(guò)繼承已有的控件來(lái)自定義控件
通過(guò)繼承一個(gè)布局文件來(lái)實(shí)現(xiàn)自定義控件
通過(guò)繼承View類來(lái)實(shí)現(xiàn)自定義控件
二、Fragment的學(xué)習(xí)
1.什么是fragment?
Fragment是Activity中的一部分
多個(gè)Fragment可以組合到一個(gè)Activity中
多個(gè)Activity可以重用一個(gè)Fragment
總結(jié):Fragment相當(dāng)于模塊化的一段activity,具有自己的生命周期,接受自己的事件??梢栽赼ctivity運(yùn)行時(shí)被添加或刪除
2.Fragment的生命周期
通過(guò)圖表的方式表示:
在上面的流程圖中,有很多地方和Activity的生命周期較為類似,但是也有很多不同之處。其中比較重要的是onCreateView。
三、Handler的學(xué)習(xí)
1.多線程和異步
多線程是指從軟件或者硬件上實(shí)現(xiàn)多個(gè)線程并發(fā)執(zhí)行的技術(shù),一個(gè)進(jìn)程中有多個(gè)任務(wù),每個(gè)任務(wù)就是一個(gè)線程,當(dāng)一起執(zhí)行的時(shí)候就需要異步執(zhí)行。
2.Handler的基本概念
Handler的主要作用是用來(lái)處理異步的消息,可以用來(lái)傳遞Message和Runnable的對(duì)象
3.Looper
消息泵,是消息隊(duì)列(Message queue)的管理者,每一個(gè)looper對(duì)象和一個(gè)線程關(guān)聯(lián),looper負(fù)責(zé)取出消息,然后交給Handler處理。
4.Message
Message的主要方法如下:
obtainMessage()取得消息
sendMessage() 發(fā)送
handlerMessage() 處理消息