android屏幕自適應

市場上手機種類繁多,尺寸大小與分辨率也不盡相同,因此對於android軟件開發人員來說,屏幕的適應能力成了所要解決的問題。


首先要使設計的界面適應屏幕,可多用LinearLayout和RelativeLayout,儘量不要使用絕對佈局;控件的長、寬值多使用match_parent或者wrap_content,或者在佈局中可多使用layout_weight屬性;如需要固定的長度,採用單位爲設備獨立像素(dp/dip/sp),並且將其定義在dimens資源文件中再引用,而非直接寫在layout中。


一、layout_weight屬性的使用

LinearLayout或其子類具有layout_weight屬性,使用layout_weight屬性,可以使屏幕自適應能力更強,但在使用時有些需要注意的地方,下面以LinearLayout爲例展開說明。

當LinearLayout的orientation屬性值爲horizontal時(子視圖以橫向排列),那麼使用layout_weight時應將子視圖的layout_width屬性設置爲0dp,否則layout_weight屬性不起作用;此時layout_weight表示橫向比重。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <View
        android:id="@+id/view1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2" />
    
    <View
        android:id="@+id/view2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3" />
</LinearLayout>
 如上代碼,表示view1與view2橫向排列,view1的寬度佔LinearLayout寬度的2/(2+3)即2/5,view2的寬度佔LinearLayout寬度的3/5。

同樣,如果LinearLayout的orientation屬性值爲vertical時,子視圖以縱向排列,那麼使用layout_weight時應將子視圖的layout_height屬性設置爲0dp,否則layout_weight屬性不起作用;此時layout_weight表示縱向比重,佔比重的算法與橫向一致。


二、圖片自適應

在編寫界面時,難免用到圖片,使圖片適應不同分辨率的手機。如果是色塊的話,最好使用在代碼中顏色值填充的方式,如不是色塊比較好的方式就是採用.9的圖片,如無法製作成.9的圖片,可以採用在res建立多個文件夾,在不同的文件夾存放不懂分辨率的圖片來達到自適應。

drawable:存放對分辨率要求不高的圖片和xml配置文件

drawable-ldpi:存放低分辨率圖片 0.75

drawable-mdpi:存放中等分辨率圖片(適應於主流分辨率手機的圖片存放位置) 1

drawable-hdpi:存放較高分辨率圖片 1.5

drawable-xhdpi:存放高分辨率圖片 2

drawable-xxhdpi:存放超高分辨率圖片 3

那麼如何製作一組圖片,然後存放在不同文件夾,使其自適應不同分辨率的手機呢?

首先可先確定出適應於主流分辨率手機的圖片,如圖片分辨率是1的話,要對應作出0.75、1、1.5、2、3這5中不同分辨率的圖片,分別放在以上文件夾。爲了防止圖片失真,一般先做超高分辨率的圖片,然後再依次縮小。如,現需要一張像素爲100*100圖片可適應於主流分辨率手機,那麼,應先做300*300的圖片存放在drawable-xxhdpi文件夾,然後將其分別縮爲200*200的存放在drawable-xhdpi文件夾,縮爲150*150存放在drawable-hdpi文件夾,縮爲100*100存放drawable-mdpi文件夾,以及縮爲75*75的存放在drawable-ldpi。

特別說明:同一組圖片的文件名稱需一致。


三、尺寸自適應

文章最前面有提到有些必須使用絕對長度時,需將其定義在dimens資源文件中再引用,而非直接寫在layout中,這是由於我們可以使用多個文件夾來存放dimens.xml,在不同文件夾下的dimens文件中定義不同的值,可達到自適應的效果。

value:存放默認值,如果沒有找到對應尺寸的value文件,則會適應此value的值。如找不到對應尺寸的value文件,在value中又沒有定義,那麼程序在運行時會出錯。

value-sw320dp:存放手機最短邊尺寸爲320dp的對應的值。如屏幕配置爲240*320 的ldpi、320*480的mdpi和480*800的hdpi設備。

value-sw480dp:存放手機最短邊尺寸爲480dp的對應值。

value-sw600dp:存放手機最短邊尺寸爲600dp的對應值。

value-sw720dp:存放手機最短邊尺寸爲720dp的對應值。

value-sw1080dp:存放手機最短邊尺寸爲1080dp的對應值。

看到這裏,也許大家已經明白,爲什麼我們在設置尺寸是要使用dp/dip/sp。和文件夾的名稱一樣,如在value-sw320dp文件夾中定義的dimen 值爲320dp,那麼在value-sw480dp文件夾中就該是480dp,其餘文件夾以此類推。

細心的猿們會發現,文件夾value-sw320dp中的320不止與手機短邊分辨率,還與其密度相關。如240*320 ldpi的時候之所以是value-sw320dp類型,是因爲240/0.75=320;320*480 mdpi爲320/1=320,;480*800 hdpi爲480/1.5=320。

特別說明:同一組圖片的文件名稱需一致。


四、佈局自適應

這種方式較少用,因爲相當於需要寫多套佈局,正常情況下同時使用二和三已經能夠滿足。

其也是使用多個文件夾的方式來實現,

layout:存放一些通用佈局xml文件,如界面頂部和底部的佈局,不會隨着屏幕大小變化的佈局。

layout-small:屏幕尺寸小於3英寸左右的佈局

layout-normal:屏幕尺寸小於4.5英寸左右的佈局

layout-large:屏幕尺寸4到7英寸之間佈局

layout-xlarge:屏幕尺寸7-10英寸之間佈局

layout-xxlarge:屏幕尺寸10英寸以上佈局


參考:

長度單位dp介紹:http://baike.baidu.com/link?url=4EcoFjiJF_1M0-l8lpIT7urLlytj64ZYSg7gHVHKFuT80k_UiEAXQxfNL6GOtYswdFETRgWowxu3UqctZsOhIq

不同手機屏幕分辨率自適應:http://blog.csdn.net/xsl1990/article/details/16931709

dpi和分辨率的關係:http://blog.csdn.net/ueryueryuery/article/details/20048401

不同分辨率自適應總結:http://www.cnblogs.com/tianjian/archive/2011/11/25/2262866.html

資源文件名稱修飾語介紹:http://zhidao.baidu.com/link?url=oXlqoyxRCDBw32Ozw_M6hb71ImfsiiSECN_recW7VCQ3SYbomt6DPH-UsbhGj1rKTh9H2O3Nyt9JjGHfXD9pwbq7I-Jo2Ha5X8aaadQhZGa

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章