Android適配
適配不同的語言
建立區域設定目錄及字串檔案
為支援多國語言,在res/
中建立一個額外的values
目錄以連字元和ISO國家程式碼結尾命名,比如values-es/
是為語言程式碼為"es"的區域設定的簡單的資原始檔的目錄。Android會在執行時根據裝置的區域設定,載入相應的資源。詳見Providing Alternative Resources。
若決定支援某種語言,則需要建立資源子目錄和字串資原始檔,例如:
MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
新增不同區域語言的字串值到相應的檔案。
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中就應該包含一些可選資源,針對不同的螢幕尺寸和解析度,來優化其外觀。
- 有4種普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
- 4種普遍解析度:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)
宣告針對不同螢幕所用的layout和bitmap,必須把這些可選資源放置在獨立的目錄中,這與適配不同語言時的做法類似。
同樣要注意螢幕的方向(橫向或縱向)也是一種需要考慮的螢幕尺寸變化,因此許多app會修改layout,來針對不同的螢幕方向優化使用者體驗。
建立不同的layout
為了針對不同的螢幕去優化使用者體驗,我們需要為每一種將要支援的螢幕尺寸建立唯一的XML檔案。每一種layout需要儲存在相應的資源目錄中,目錄以-
為字尾命名。例如,對大尺寸螢幕(large screens),一個唯一的layout檔案應該儲存在res/layout-large/
中。
Note:為了匹配合適的螢幕尺寸Android會自動地測量我們的layout檔案。所以不需要因不同的螢幕尺寸去擔心UI元素的大小,而應該專注於layout結構對使用者體驗的影響。(比如關鍵檢視相對於同級檢視的尺寸或位置)
例如,這個工程包含一個預設layout和一個適配大螢幕的layout:
MyProject/
res/
layout/
main.xml
layout-large/
main.xml
layout檔案的名字必須完全一樣,為了對相應的螢幕尺寸提供最優的UI,檔案的內容不同。
如平常一樣在app中簡單引用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系統會根據app所執行的裝置螢幕尺寸,在與之對應的layout目錄中載入layout。更多關於Android如何選擇恰當資源的資訊,詳見Providing Resources。
另一個例子,這一個工程中有為適配橫向螢幕的layout:
MyProject/
res/
layout/
main.xml
layout-land/
main.xml
預設的,layout/main.xml
檔案用作豎屏的layout。
如果想給橫屏提供一個特殊的layout,也適配於大螢幕,那麼則需要使用large
和land
修飾符。
MyProject/
res/
layout/ # default (portrait)
main.xml
layout-land/ # landscape
main.xml
layout-large/ # large (portrait)
main.xml
layout-large-land/ # large landscape
main.xml
Note:Android 3.2及以上版本支援定義螢幕尺寸的高階方法,它允許我們根據螢幕最小長度和寬度,為各種螢幕尺寸指定與密度無關的layout資源。這節課程不會涉及這一新技術,更多資訊詳見Designing for Multiple Screens。
建立不同的bitmap
我們應該為4種普遍解析度:低,中,高,超高精度,都提供相適配的bitmap資源。這能使我們的app在所有螢幕解析度中都能有良好的畫質和效果。
要生成這些影像,應該從原始的向量影像資源著手,然後根據下列尺寸比例,生成各種密度下的影像。
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (基準)
- ldpi: 0.75
這意味著,如果針對xhdpi的裝置生成了一張200x200的影像,那麼應該為hdpi生成150x150,為mdpi生成100x100, 和為ldpi生成75x75的圖片資源。
然後,將這些檔案放入相應的drawable資源目錄中:
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何時候,當引用@drawable/awesomeimage
時系統會根據螢幕的解析度選擇恰當的bitmap。
適配不同的系統版本
新的Android版本會為我們的app提供更棒的APIs,但我們的app仍應支援舊版本的Android,直到更多的裝置升級到新版本為止。這節課程將展示如何在利用新的APIs的同時仍支援舊版本Android。
Platform Versions的控制皮膚會定時更新,通過統計訪問Google Play Store的裝置數量,來顯示執行每個版本的安卓裝置的分佈。一般情況下,在更新app至最新Android版本時,最好先保證新版的app可以支援90%的裝置使用。
Tip:為了能在幾個Android版本中都能提供最好的特性和功能,應該在我們的app中使用Android Support Library,它能使我們的app能在舊平臺上使用最近的幾個平臺的APIs。
指定最小和目標API級別
AndroidManifest.xml檔案中描述了我們的app的細節及app支援哪些Android版本。具體來說,``元素中的minSdkVersion
和targetSdkVersion
屬性,標明在設計和測試app時,最低相容API的級別和最高適用的API級別(這個最高的級別是需要通過我們的測試的)。例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>
隨著新版本Android的釋出,一些風格和行為可能會改變,為了能使app能利用這些變化,而且能適配不同風格的使用者的裝置,我們應該將targetSdkVersion
的值儘量的設定與最新可用的Android版本匹配。
執行時檢查系統版本
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);
}
}
Note:當解析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/
中單獨版本的檔案)。
使用平臺風格和主題
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適配: 拉伸適配的缺點Android
- Android圖示適配Android
- Android 劉海屏適配Android
- Android P 適配指南Android
- android全面屏適配Android
- android 螢幕適配Android
- Android N 適配心得Android
- android 圖片適配Android
- android螢幕適配三:通過畫素密度適配Android
- Android螢幕適配(理論適配100%機型)Android
- Android Q 提前適配攻略Android
- Android適配:DP簡述Android
- Android6.0~9.0適配Android
- Android許可權適配Android
- Android7.0的適配Android
- Android 桌面角標的適配Android
- 苦逼的Android適配Android
- Android中的icon適配Android
- Android O 適配詳細指南Android
- Android7.0機型適配Android
- Android 主流螢幕以及適配Android
- Android 6.0、7.0、8.0、9.0適配Android
- Android 劉海屏適配總結Android
- Android深色模式適配原理分析Android模式
- Android適配學習記錄Android
- Android 螢幕適配工具類Android
- Android 關於資源適配Android
- android螢幕適配詳解Android
- android 螢幕適配二:手寫百分比佈局適配Android
- android 螢幕適配一:通過自定義View的方式實現適配AndroidView
- Android華為凹口屏適配小結Android
- Android 螢幕適配終結者Android
- Android開發之螢幕適配Android
- android螢幕適配的問題Android
- Android 螢幕適配最佳實踐Android
- Android Q適配(非SDK介面管控)Android
- 小程式canvas適配android7,8CanvasAndroid
- Android R 新特性分析及適配指南Android