【Android應用開發技術:使用者介面】裝置適配

來源:互聯網
上載者:User

標籤:

郭孝星
微博:郭孝星的新浪微博
郵箱:[email protected]
部落格:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell

由於Android平台的豐富性和多樣性,全世界的Android裝置有著各種各樣的尺寸和大小,而為了能夠推廣我們的應用給各種各樣的使用者,裝置適配是一件很重要的工作。

一 語言適配

把UI中的字串儲存在外部檔案,通過代碼提取,這是一種很好的做法。Android可以通過工程中的資來源目錄輕鬆實現這一功能。

為了支援多國語言,在res/中建立一個額外的values目錄以連字號和ISO國家代碼結尾命名,比如values-es/是為語言代碼為”es”的地區設定的簡單的資源檔的目錄。Android會在運行時根據裝置的地區設定,載入相應的資源

若你決定支援某種語言,則需要建立資源子目錄和字串資源檔,如所示:

添加不同地區語言的字串值到相應的檔案,在運行時,Android系統會根據使用者裝置當前的地區設定,使用相應的字串資源。

舉例

下面列舉了幾個不同語言對應不同的字串資源檔:

英語(預設區域語言,/values/strings.xml)

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="title">My Application</string>    <string name="hello_world">Hello World!</string></resources>

西班牙語(/values-es/strings.xml)

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="title">Mi Aplicación</string>    <string name="hello_world">Hola Mundo!</string></resources>

法語(/values-fr/strings.xml)

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="title">Mon Application</string>    <string name="hello_world">Bonjour le monde !</string></resources>
二 螢幕適配

Android將裝置螢幕歸類為兩種常規屬性:尺寸和解析度。你應該想到你的App會被安裝在各種螢幕尺寸和解析度的裝置中。這樣,你的App就應該包含一些可選資源,針對不同的螢幕尺寸和解析度,來最佳化你的App外觀。

一般說來,有4種普遍尺寸:

  • 小(small)
  • 普通(normal)
  • 大(large)
  • 超大(xlarge)

以及4種解析度

  • 低精度(ldpi)
  • 中精度(mdpi)
  • 高精度(hdpi)
  • 超高精度(xhdpi)

聲明針對不同螢幕所用的layout和bitmap,把這些可選資源放置在獨立的目錄中,與適配不同語言時的做法類似。同樣要注意螢幕的方向(橫向或縱向)也是一種需要考慮的螢幕尺寸變化,所以許多App會修改layout,來針對不同的螢幕方向最佳化使用者體驗。

2.1 建立不同的layout

為了針對不同的螢幕去最佳化使用者體驗,你需要對每一種將要支援的螢幕尺寸,建立唯一的XML檔案。每一種layout需要儲存在相應的資來源目錄中,目錄以- 為尾碼命名。例如,對大尺寸螢幕(large screens),一個唯一的layout檔案應該儲存在 res/layout-large/ 中。為了匹配合適的螢幕尺寸Android會自動地測量你的layout檔案。所以你不需要因不同的螢幕尺寸去擔心UI元素的大小,而應該專註於layout結構對使用者體驗的影響,比如關鍵視圖相對於同級視圖的尺寸或位置。

Android Studio在處理這種布局檔案的尺寸和方向變化時也是非常智能的,你只需要簡單的建立layout-land、layout-large這些目錄即可,如下所示:

2.2 建立不用的bitmap

我們應該為4種普遍解析度:低,中,高,超高精度,都提供相適配的bitmap資源。以便在所有螢幕解析度中都能有良好的畫質和效果。
要產生這些映像,需要從原始的向量映像資源著手,然後根據下列尺寸比例,產生各種密度下的映像。

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基準)
  • ldpi: 0.75

也就是說,如果你針對xhdpi的裝置產生了一張200x200的映像,同樣的你應該為hdpi產生150x150,為mdpi產生100x100, 和為ldpi產生75x75的圖片資源。

任何時候,當你引用 @drawable/awesomeimage 時系統會根據螢幕的解析度選擇恰當的bitmap。另外,低密度(ldpi)資源是非必要的,當你提供了hdpi的映像,系統會把hdpi的映像按比例縮小一半,去適配ldpi的螢幕。

三 系統適配

新的Android版本會為你的app提供更棒的APIs,但你的app仍應該支援舊版本的Android,直到更多的裝置升級到新版本為止。

Platform Versions的控制台會定時更新,通過統計訪問Google Play Store的裝置數量,來顯示運行每個版本的安卓裝置的分布。一般情況下,在更新你的app至最新Android版本時,最好先保證你的新版app可以支援90%的裝置使用。

為了能在幾個Android版本中都能提供最好的特性和功能,我們應該在App中使用Android Support Library,它能使你的App能在舊平台上使用最近的幾個平台的APIs。

3.1 指定最小和目標API層級

AndroidManifest.xml檔案中描述了你的App的細節,並且標明App支援哪些Android版本。具體來說,元素中

  • minSdkVersion:最低相容API的層級
  • targetSdkVersion:最高適用的API層級(這個最
    高的層級是需要通過你的測試的)

隨著新版本Android的發布,一些風格和行為可能會改變,為了能使你的app能利用這些變化,而且能適配不同風格的使用者的裝置,我們應該設定targetSdkVersion的值去匹配最新的可用Android版本。

如下所示:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.allenwells.myapplication" >    <uses-sdk         android:minSdkVersion="4"         android:targetSdkVersion="15" /></manifest>
3.2 在運行時檢查系統版本

Android在Build常量類中提供了對每一個版本的唯一代號,在你的app中使用這些代號可以建立條件,保證依賴於進階別的API的代碼,只會在這些API在當前系統中可用時才會執行,如下所示:

private void setUpActionBar() {    // Make sure we‘re running on Honeycomb or higher to use ActionBar APIs    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {        ActionBar actionBar = getActionBar();        actionBar.setDisplayHomeAsUpEnabled(true);    }}

另外,當解析XML資源時,Android會忽略當前裝置不支援的XML屬性。所以你可以安全地使用較新版本的XML屬性,而不需要擔心舊版本Android遇到這些代碼時會崩潰。例如如果你設定 targetSdkVersion=”11” ,你的App會在Android 3.0或更高時預設包含ActionBar。然後添加menu items到action bar時,你需要在你的menu XML資源中設定:

android:showAsAction="ifRoom" 

在跨版本的XML檔案中這麼做是安全的,因為舊版本的Android會簡單地忽略showAsAction屬性,你並不需要用到res/menu-v11/ 中單獨版本的檔案。

3.3 使用平颱風格和主題

Android提供了使用者體驗主題,為App提供基礎作業系統的外觀和體驗。這些主題可以在manifest檔案中被應用於你的App中.通過使用內建的風格和主題,App會自然地隨著Android新版本的發布,自動適配最新的外觀和體驗.

使activity看起來像對話方塊

<activity android:theme="@android:style/Theme.Dialog">

使activity有一個透明背景

<activity android:theme="@android:style/Theme.Translucent">

應用在/res/values/styles.xml 中定義的自訂佈景主題:

<activity android:theme="@style/CustomTheme">

使整個App應用一個主題(全部activities)在元素中添加android:theme屬性

<application android:theme="@style/CustomTheme">

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

【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.