一、UI界面開發(fā)
常見控件:TextView宗收、Button漫拭、EditText、ImageView混稽、ProgressBar采驻、AlertDialog、ProgressDialog匈勋。
四大布局方式:LinearLayout礼旅、RelativeLayout、FrameLayout洽洁、TableLayout痘系。
自定義控件與ListView定制及優(yōu)化
dp與sp:dp是密度無關(guān)像素的意思, 也被稱作dip饿自, 和px相比汰翠, 它在不同密度的屏幕中的顯示比例將保持一致。sp是可伸縮像素的意思昭雌, 它采用了和dp同樣的設(shè)計理念复唤, 解決了文字大小的適配問題。Android中的密度就是屏幕每英寸所包含的像素數(shù)烛卧,通常以dpi為單位佛纫。比如一個手機(jī)屏幕的寬是2英寸長是3英寸,如果它的分辨率是320*480像素唱星,那這個屏幕的密度就是160dpi雳旅,如果它的分辨率是640*960,那這個屏幕的密度就是320dpi间聊, 因此密度值越高的屏幕顯示的效果就越精細(xì)。
二抵拘、碎片(Fragment)
碎片(Fragment)是一種可以嵌入在活動當(dāng)中的UI片段哎榴,它能讓程序更加合理和充分地利用大屏幕的空間, 因而在平板上應(yīng)用的非常廣泛。
動態(tài)添加碎片步驟
動態(tài)添加碎片主要分為5步尚蝌。
1.創(chuàng)建待添加的碎片實例迎变。
2.獲取到FragmentManager,在活動中可以直接調(diào)用getFragmentManager()方法得到飘言。
3.開啟一個事務(wù)衣形,通過調(diào)用beginTransaction()方法開啟。
4.向容器內(nèi)加入碎片姿鸿, 一般使用replace()方法實現(xiàn)谆吴, 需要傳入容器的id和待添加的碎片實例。
5.提交事務(wù)苛预,調(diào)用commit()方法來完成句狼。
在碎片中模擬返回棧
FragmentTransaction中提供了一個addToBackStack()方法,可以用于將一個事務(wù)添加到返回棧中热某,模仿類似于返回棧的效果腻菇,按下Back鍵可以回到上一個碎片。
碎片與活動之間通信
為了方便碎片和活動之間進(jìn)行通信昔馋,F(xiàn)ragmentManager提供了一個類似于findViewById()的方法筹吐,專門用于從布局文件中獲取碎片的實例。
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
調(diào)用FragmentManager的findFragmentById()方法秘遏, 可以在活動中得到相應(yīng)碎片的實例丘薛,然后就能輕松地調(diào)用碎片里的方法了。
每個碎片中都可以通過調(diào)用getActivity()方法來得到和當(dāng)前碎片相關(guān)聯(lián)的活動實例垄提,有了活動實例之后榔袋, 在碎片中調(diào)用活動里的方法就變得輕而易舉了。 另外當(dāng)碎片中需要使用Context對象時铡俐, 也可以使用getActivity()方法凰兑, 因為獲取到的活動本身就是一個Context對象了。
MainActivity activity = (MainActivity) getActivity();
碎片的生命周期
1.運(yùn)行狀態(tài)
當(dāng)一個碎片是可見的审丘, 并且它所關(guān)聯(lián)的活動正處于運(yùn)行狀態(tài)時吏够, 該碎片也處于運(yùn)行狀態(tài)。
2.暫停狀態(tài)
當(dāng)一個活動進(jìn)入暫停狀態(tài)時(由于另一個未占滿屏幕的活動被添加到了棧頂)滩报,與它相關(guān)聯(lián)的可見碎片就會進(jìn)入到暫停狀態(tài)锅知。
3.停止?fàn)顟B(tài)
當(dāng)一個活動進(jìn)入停止?fàn)顟B(tài)時, 與它相關(guān)聯(lián)的碎片就會進(jìn)入到停止?fàn)顟B(tài)脓钾。 或者通過調(diào)用FragmentTransaction的remove()售睹、replace()方法將碎片從活動中移除,但有在事務(wù)提交之前調(diào)用addToBackStack()方法可训,這時的碎片也會進(jìn)入到停止?fàn)顟B(tài)昌妹〈肥啵總的來說,進(jìn)入停止?fàn)顟B(tài)的碎片對用戶來說是完全不可見的飞崖,有可能會被系統(tǒng)回收烂叔。
4.銷毀狀態(tài)
碎片總是依附于活動而存在的, 因此當(dāng)活動被銷毀時固歪, 與它相關(guān)聯(lián)的碎片就會進(jìn)入到銷毀狀態(tài)蒜鸡。或者通過調(diào)用FragmentTransaction的remove()牢裳、replace()方法將碎片從活動中移除逢防,但在事務(wù)提交之前并沒有調(diào)用addToBackStack()方法,這時的碎片也會進(jìn)入到銷毀狀態(tài)贰健。
碎片還提供了一些附加的回調(diào)方法:
1. onAttach()
當(dāng)碎片和活動建立關(guān)聯(lián)的時候調(diào)用胞四。
2. onCreateView()
為碎片創(chuàng)建視圖(加載布局)時調(diào)用。
3. onActivityCreated()
確保與碎片相關(guān)聯(lián)的活動一定已經(jīng)創(chuàng)建完畢的時候調(diào)用伶椿。
4. onDestroyView()
當(dāng)與碎片關(guān)聯(lián)的視圖被移除的時候調(diào)用辜伟。
5. onDetach()
當(dāng)碎片和活動解除關(guān)聯(lián)的時候調(diào)用。
動態(tài)加載布局
1.使用限定符
2.使用最小限定符
使用large限定符成功解決了單頁雙頁的判斷問題脊另,不過很快又有一個新的問題出現(xiàn)了导狡,large到底是指多大呢?有的時候我們希望可以更加靈活地為不同設(shè)備加載布局偎痛,不管它們是不是被系統(tǒng)認(rèn)定為 “l(fā)arge”旱捧,這時就可以使用最小寬度限定符(Smallest-width Qualifier)了。
最小寬度限定符允許我們對屏幕的寬度指定一個最小指(以dp為單位)踩麦, 然后以這個最小值為臨界點枚赡, 屏幕寬度大于這個值的設(shè)備就加載一個布局, 屏幕寬度小于這個值的設(shè)備就加載另一個布局谓谦。