Android適配方案小結(三)
在Android適配方案小結(一)、(二)中,我們瞭解了一些基本概念。
那麼在具體開發中,我們應該注意什麼呢。
首先,我們必須要知道,其實適配的關鍵在於兩點:
(1)不同解析度裝置的適配,這點在單位的使用上用dp、sp以及圖片資源存放於不同的drawable檔案夾就可以解決問題;
(2)不同尺寸的適配,這點主要靠將相關值以及布局檔案放置於不同的檔案夾中來解決。
2.1 values檔案夾
可以在工程下建立不同的values檔案夾:values-sw480dp, values-sw600dp,
values-sw720dp-land等。比如一個控制項的寬度,在10寸pad上是10dp,在8寸pad
上是5dp。這時,你可以定義一個變數,button_width,然後在values-sw600dp
下寫5dp,在values-sw720-land下寫
10dp。這樣就達到了在不同尺寸pad上,
相應控制項大小不一樣的效果。
2.1 layout檔案夾
如果在不同尺寸裝置上展示的布局有明顯差別,僅僅用values不同已經難以控制,
那麼就可以考慮寫不同的布局檔案置於不同的layout檔案夾下,android會根據裝置
尺寸去載入相應檔案夾下的布局檔案。如:layout-sw480dp,layout-sw600dp,
layout-sw700dp等。
值得注意的是,如果不是很有必要,盡量採用2.1方案,方便維護。如果尺寸和解析度都不同,
那麼就要結合(1)、(2)考慮了。
(補充:其實values檔案夾和layout檔案夾不僅僅是根據尺寸判斷,也和解析度有關,不過在通常情況下,
綜合計算考慮,僅根據尺寸判斷就可以了:
320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc).480dp: a tweener tablet like the Streak (480x800 mdpi).600dp: a 7” tablet (600x1024 mdpi).720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).
600dp的含義是:代表這個裝置的最短的那一邊。
擷取裝置的最短邊的代碼是:Configuration config = getResources().getConfiguration();
int smallestScreenWidth = config.smallestScreenWidthDp;
這個時候拿smallestScreenWidth 與600想比較就可以知道該裝置能否讀取裡面的資源了。
)
除此之外,為了方便適配,在編碼時我們還應該注意什麼呢,主要有以下幾點:
(1)多使用權重(android:layout_weight)
尤其是在tab切換布局,listview title及Item布局等情況下;
(2)設定寬度和高度時,盡量使用match_parent和wrap_content,避免把控制項寬高設死;
(3)父容器布局選用
多使用RelativeLayout,FrameLayout,GridLayout等,減少布局層次。當然,在使用
權重時,得採用LinearLayout;
(4) 在xml裡,設定高度、寬度採用dp(dip),設定字型採用sp。
(應該注意,在代碼裡面,我們寫的setHeight(...)單位是px)