一帚桩、dp、sp和px
PX :像素點
dp:與像素相關(guān)的單位
sp:同dp,通常用來修飾文字
文字尺寸一律用sp嘹黔,非文字一律使用dp账嚎。
偶爾使用px。例如需要在屏幕上畫一條細的分割線:1px
(用<View></View>)
二儡蔓、Inflater
inflater就相當(dāng)于將一個xml中定義的布局找出來郭蕉。
LayoutInflater
得到LayoutInflater的三種方法:
1、getLayoutInflater()
2喂江、getSystemService(LAYOUT_INFLATER_SERVICE)
3召锈、LayoutInflater.form(Context)
得到inflater后可以讀視圖:
View view = inflate(R.layout.xml文件,null)
得到視圖后可以找控件:
view.findViewById()
三获询、提取布局的屬性theme&style
theme是針對窗體級別的烟勋,改變窗體樣式规求;
style是針對窗體元素級別的,改變指定控件或者Layout的樣式卵惦。
抽象view的共同屬性
可繼承
在style.xml文件中可以自定義樣式
四 View學(xué)習(xí)
View是如何工作的
第一步 view構(gòu)造器 初始化
在新建的view類中要添加構(gòu)造器并且在構(gòu)造器中要初始化
在下圖是在View構(gòu)造器中進行初始化
第二步 用onMesure()定大小
第三步用onLayout()定位置
第四步用onDraw()繪制
第五步用invalidate()刷新
五 自定義控件的形式
繼承已有的控件來實現(xiàn)自定義控件
通過繼承一個布局文件實現(xiàn)自定義控件
同繼承view類來實現(xiàn)自定義控件
開發(fā)自定義控件的步驟:
1阻肿、了解View的工作原理
2、 編寫繼承自View的子類
3沮尿、 為自定義View類增加屬性
4丛塌、 繪制控件
5、 響應(yīng)用戶消息
6 畜疾、自定義回調(diào)函數(shù)
六 Fragment學(xué)習(xí)
1赴邻、Fragment 相當(dāng)于模塊化的一段activity
2、具有自己的生命周期啡捶,接收自己的事件
3姥敛、在activity運行時被添加或刪除
七 Handler學(xué)習(xí)
1、Handler
當(dāng)應(yīng)用程序啟動時瞎暑,Android首先會開啟一個主線程(也就是UI線程)彤敛,主線程為管理界面中的UI控件,進行事件分發(fā)了赌。
主要接受子線程發(fā)送的數(shù)據(jù)墨榄, 并用此數(shù)據(jù)配合主線程更新UI。
當(dāng)應(yīng)用程序啟動時勿她,Android首先會開啟一個主線程 (也就是UI線程) 袄秩, 主線程為管理界面中的UI控件, 進行事件分發(fā)逢并, 比如說之剧, 你要是點擊一個 Button ,Android會分發(fā)事件到Button上砍聊,來響應(yīng)你的操作猪狈。? 如果此時需要一個耗時的操作,例如: 聯(lián)網(wǎng)讀取數(shù)據(jù)辩恼,或者讀取本地較大的一個文件的時候雇庙,你不能把這些操作放在主線程中,如果你放在主線程中的話灶伊,界面會出現(xiàn)假死現(xiàn)象疆前, 如果5秒鐘還沒有完成的話,會收到Android系統(tǒng)的一個錯誤提示? "強制關(guān)閉"聘萨。? 這個時候我們需要把這些耗時的操作竹椒,放在一個子線程中,因為子線程涉及到UI更新米辐,Android主線程是線程不安全的胸完, 也就是說书释,更新UI只能在主線程中更新,子線程中操作是危險的赊窥。 這個時候爆惧,Handler就出現(xiàn)了,來解決這個復(fù)雜的問題锨能,由于Handler運行在主線程中(UI線程中)扯再,它與子線程可以通過Message對象來傳遞數(shù)據(jù), 這個時候址遇,Handler就承擔(dān)著接受子線程傳過來的(子線程用sedMessage()方法傳弟)Message對象熄阻,(里面包含數(shù)據(jù)),把這些消息放入主線程隊列中倔约,配合主線程進行更新UI秃殉。
用handler發(fā)送消息,首先先取得一個Message浸剩,然后對里面的參數(shù)進行賦值钾军,然后用handler的sendMessageDelayed將message延遲發(fā)送。
發(fā)送出去消息后乒省,然后用handleMessage接收消息,判斷what來識別是哪一個message畦木,然后對消息進行出處理袖扛。
2、Message和MessageQueue(消息隊列)
Message:消息十籍,其中包含了消息ID蛆封,消息處理對象以及處理的數(shù)據(jù)等,由MessageQueue統(tǒng)一列隊勾栗,終由Handler處理惨篱。
MessageQueue:消息隊列,用來存放Handler發(fā)送過來的消息围俘,并按照FIFO規(guī)則執(zhí)行砸讳。當(dāng)然,存放Message并非實際意義的保存界牡,而是將Message以鏈表的方式串聯(lián)起來的簿寂,等待Looper的抽取。
3宿亡、Looper(消息泵)
Looper:消息泵常遂,不斷地從MessageQueue中抽取Message執(zhí)行。因此挽荠,一個MessageQueue需要一個Looper克胳。
Thread:線程平绩,負責(zé)調(diào)度整個消息循環(huán),即消息循環(huán)的執(zhí)行場所漠另。