android最佳實務之裝置相容性

來源:互聯網
上載者:User

標籤:android   io   使用   ar   for   檔案   sp   問題   on   

由於不同手機的尺寸大小,螢幕解析度可能存在差異。在開發應用的時候,你或許遇到過這些的問題:

1, 為什麼圖片在另外的手機上顯示的時候變小了,又或是縮小了?

2, 為什麼在layout中定義好的格局在另外的手機上變形了?

3, 為什麼自己自訂的控制項尺寸顯示不正常了?

。。。。。。。。。。。。。。。。

這些都是android中比較常見的裝置相容性相關的問題,其實解決這類問題也不難,只要掌握了一些基本概念和android內部處理相容性問的機制,這些問題都可以迎刃而解。

下邊收集了一些關於尺寸相容性問題的一些基本知識和一些best practices, 希望對大家能有所協助

1,螢幕尺寸大小與密度參考值:

 

註解:1 inch = 2.5cm

密度基準: 160dpi

2, 螢幕尺寸與密度對照表:

3,px 與 dp 在不同解析度裝置上的轉換規則:

一, 假如裝置的尺寸是2英寸的,解析度是320,那邊它的密度為160dpi,也就是基本輔助線。這時:1px=1dp=1sp.

二, 假如裝置的尺寸是2英寸,解析度是480, 那麼它的密度是240/dp.這時:1.5px=1dp=1sp

換算規則px = dp(dpi/160).

 

這個可以解析為什麼用dp作為長度單位時,即使螢幕解析度發生變化,在不同的裝置上顯示的物理長度能保持一致。而用px作為單位時,在高解析度的裝置像變小,在低解析度的裝置像變大。

 

4,使用wrap_content, fill_parent, 或者 dp 來定義layout的尺寸大小。

使用dp來定義組件的尺寸的好處是:系統會根據裝置dpi自動轉換尺寸的大小。舉個列子,在密度為160dpi的機器上,假如你定義組件的尺寸是100dp,那麼顯示的實際大小就是100px。而在密度為240的機器上,系統會把它顯示成px=100 * (240/160) px= 150px大小的尺寸。通過這種轉換,可以達到在不同解析度的裝置上,對於同一個組件,顯示的物理尺寸是相同的,不會出現變大或者變小的情況。

 

5,不同密度裝置對應影像檔的最佳比例。

對於四種密度low-dpi, medium-dpi, high-dpi, extra high-hdpi的裝置,在指定一個相同的影像檔時,分配給各種密度的影像檔的尺寸應該符合以下比例:3:4:6:9. 也就是要符合密度比例(120:160:240:360).

舉個列子,假如我們要在一個密度為160dpi的裝置上使用到一個48 * 48的影像檔。那麼對於其它密度的裝置,我們要準備的影像檔分別是:

low-density (120dpi) : 36×36

medium-density(160dpi): 48×48

high-density (240dpi) : 72×72

high-density (360dpi): 96×96

 

6,在需要的情況下,為每種尺寸的裝置提供指定的layout檔案。

res/layout/my_layout.xml             // layout for normal screen size (“default”)

res/layout-small/my_layout.xml       // layout for small screen size

res/layout-large/my_layout.xml       // layout for large screen size

res/layout-xlarge/my_layout.xml      // layout for extra large screen size

res/layout-xlarge-land/my_layout.xml // layout for extra large in landscape orientation

 

 

7, 在需要的情況下,為每種密度的裝置提供不同的影像檔.

res/drawable-mdpi/my_icon.png        // bitmap for medium density

res/drawable-hdpi/my_icon.png        // bitmap for high density

res/drawable-xhdpi/my_icon.png       // bitmap for extra high density

 

8,不在layout檔案中使用px。

因為使用px後會在解析度不同的機器上顯示成不同的物理尺寸。

 

9,不使用absoluteLayout 布局。

因為絕對布局需要指定絕對位移量,在尺寸不同的機器上,可能出現問題。

 

 

,10,如何讓我們自己寫的控制項可以配置長度和自適應所有裝置:

在所有自訂控制項中,都不要寫入程式碼長度,寬度等尺寸;應該先根據基準160dpi調式得到控制項在標準基準下控制項的最佳值,假如設為width。然後通過density = getResources().getDisplayMetrics().density 擷取當前裝置相對於基準的縮放值,然後得到一個最佳值value = width * density. 在用這個值去繪製控制項的UI。這樣我們就可以在設定檔中隨時改動控制項的大小。

 

註解:density = getResources().getDisplayMetrics().density

這個值在不同密度的裝置中返回不同的值:

160dpi:1

240dpi: 1.5

120dpi: 0.75

….類推

 

android最佳實務之裝置相容性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.