由于Android碎片化嚴(yán)重定鸟,導(dǎo)致開(kāi)發(fā)中一套代碼在不同手機(jī)上運(yùn)行起來(lái)效率不是很好涎拉,兼容性不是很好,這就需要對(duì)不同分辨率不同屏幕大小的手機(jī)做屏幕適配
1.AnfroidManifest.xml設(shè)置
在Menifest中添加子元素
android:anyDensity="true"時(shí)陈轿,應(yīng)用程序安裝在不同密度的終端上時(shí)吝羞,升序會(huì)分別加載 xxhdpi,xhdpi,hdpi,mdpi,ldpi文件夾中的資源。
相反了讨,如果設(shè)為false.即使在文件夾下?lián)碛邢嗤馁Y源捻激,應(yīng)用也不會(huì)自動(dòng)地去相應(yīng)的文件夾下尋找資源:
(1).如果drawable-hdpi,drawable-mdpi,drawable-ldpi三個(gè)文件夾中有同一張圖片資源的不同密度表示,那么系統(tǒng)會(huì)去加載drawable-mdpi文件夾中的資源前计。
(2).如果drawable-hdpi中有高密度的圖片胞谭,其他兩個(gè)文件夾中沒(méi)有對(duì)應(yīng)圖片資源,那么系統(tǒng)會(huì)去加載drawable-hdpi中的資源男杈,其他同理丈屹;
(3).如果drawable-hdpi,drawable-mdpi中有圖片資源,drawable-ldpi中沒(méi)有势就,系統(tǒng)會(huì)加載drawable-mdpi中的資源泉瞻,其他同理,使用最接近的密度級(jí)別
2.橫屏豎屏目錄區(qū)分
(1).drawable
(a).drawable-hdpi該圖片即適用于橫屏苞冯,也適用于豎屏
(b).drawable-land-hdpi 當(dāng)屏幕為豎屏袖牙,且為高密度時(shí),加載此文件夾的資源舅锄;
(c).drawable-port-hdpi, 當(dāng)屏幕為豎屏鞭达,且為高密度時(shí),加載此文件夾的資源皇忿,其他同理畴蹭。
(2)layout
在res 目錄下建立layout-port和layout-land兩個(gè)目錄,里面分別放置豎屏和橫屏兩種布局文件鳍烁,以適應(yīng)對(duì)橫屏豎屏自動(dòng)切換
多屏幕適配的4條黃金原則
(1).在layout文件中設(shè)置控件尺寸時(shí)采用fill_parent,wrap_content,match_parent和dp叨襟;
具體來(lái)說(shuō),設(shè)置view屬性 android:layout_width和android_height的志時(shí)幔荒,wrap_content糊闽,match_parent或dp 比px更好梳玫,文字大小應(yīng)該使用sp來(lái)定義;
(2).在程序的代碼中不要出現(xiàn)具體的像素值右犹,在dimens.xml中定義提澎;
為了使代碼簡(jiǎn)單,android內(nèi)部使用pix為單位表示控件的尺寸念链,但是這是基于當(dāng)前屏幕基礎(chǔ)上的盼忌。 為了適應(yīng)多種屏幕,android建議開(kāi)發(fā)者不要使用具體的像素來(lái)表示控件尺寸掂墓。
(3).不使用AbsoluteLayout,可以使用RelativeLayout替代谦纱;
(4).對(duì)不同的屏幕提供合適大小的圖片。
不同大小屏幕用不同大小的圖片君编,low:medium:high:extra-high圖片大小的比例為3:4:6:8;舉例來(lái)說(shuō)服协,對(duì)于中等密度(medium)的屏幕圖片像素大小為4848,那么低密度(low)屏幕圖片的大小為3636啦粹,高(high)屏幕的圖片大小應(yīng)為u3636,extra-high為9696.
使用9-patch PNG圖片
使用圖片資源時(shí)窘游,如果出現(xiàn)拉伸唠椭,因?yàn)閳D片處理的原因會(huì)變形,導(dǎo)致界面走形忍饰。9-patch PNG 圖片也是一種標(biāo)準(zhǔn)的PGN圖片贪嫂。在原生PNG 圖片四周空出一個(gè)像素間隔,用來(lái)標(biāo)識(shí)PNG圖片中哪些部分可以拉伸艾蓝,哪些不可以拉伸力崇,背景上的邊框位置等。
”上“ ”左“ 定義可拉伸區(qū)域
”右“ ”下“ 定義顯示區(qū)域赢织,如果用到完整填充的背景圖亮靴,建議不要通過(guò)android:padding來(lái)設(shè)置邊距,而是通過(guò)9-patch方式來(lái)定義