在安卓應用上支持從右到左(RTL)布局
世界上的大部分語言的書寫方式都是從左到右,但是也有一些語言是從右到左(Right to Left,以下簡稱為 RTL )書寫的,譬如阿拉伯語,希伯來語以及敘利亞語。雖然這些都是小語種,支持RTL能給當地用戶更好的體驗。
從 Google 官網得知,安卓在SDK17(4.2 Jelly Bean)版本的以上能原生的支持RTL,隻需以下幾個步驟就能實現。
- 在 AndroidManifest.xml 的 uses-sdk 標簽中,將 targetSdkVersion 或 minSdkVersion 設為 17 或以上。
- 在 AndroidManifest.xml 的 application 標簽中,加入
android:supportsRtl=”true”
。 - 在布局xml文件中,將所有的
left
和right
分別改為start
和end
,比如android:paddingLeft
改為android:paddingStart
。 - 由於
start
和end
是安卓4.2以後才支持的,如果應用還要支持安卓4.2以下的舊設備,則須在保留left
和right
的基礎上加入start
和end
,例如同時保留android:paddingLeft
和android:paddingStart
。
如果你是用 Android Studio 的話,隻需從 Refactor 菜單選項裏點 Add RTL Support where possible 就可以一步到位完全上列操作。
同學們你以為這樣就結束的話就 too young too naive 了,安卓的套路大家都知道,哪能這麼容易放過碼農的?讓我們繼續。
安卓的 RTL 引擎會自動將水平布局的排列顛倒,讓 UI 控件的排列順序變為從右到左,如圖所示。
請注意該圖中的圖標沒有左右翻轉,雖然看來也沒有什麼問題,但是如果我們換一個有方向性的圖標呢?請看下圖。
這樣看起來就有點不對,後退鍵的方向應該指向右邊才是,像這種情況我們隻能手動加入鏡像圖片,並用 ldrtl
後綴告之。假設後退鍵的圖片資源是放在 /res/drawable/ic_back.xml
,它的鏡像圖片的路徑就為 /res/drawable-ldrtl/ic_back.xml
。
不僅僅是圖片,我們也可以用 ldrtl
後綴定義在RTL模式下的其它資源,比如顏色,布局和字符串等。
當安卓設備的語言設置是任何RTL語言的時候,設備默認的全局布局將自動變為 RTL。同學們也許會問,我不懂阿拉伯語,可以在測試環境下把布局改成 RTL 來方便開發嗎?在開發者設定裏就有這個選項,選項的名稱和位置因機而異,在我的手機上是叫做 Force RTL layout direction
。
如果你的應用提供更該語言的選項,那麼就要注意在更改語言的同時也要調整合適的布局。這裏就可以用 SDK 17的 Configuration 有一個新的API,使用方法如下。
Locale locale = getLocale();
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
config.locale = locale;
if (Build.VERSION.SDK_INT >= 17) {
config.setLayoutDirection(locale);
}
resources.updateConfiguration(config, resources.getDisplayMetrics());
當 getLocale()
返回的是一個 RTL 布局的語言時(如阿拉伯語),config.setLayoutDirection(locale)
將把應用的全局布局方向更新為 RTL 來顯示該語言。
最後更新:2017-10-17 17:34:15
上一篇:
阿裏雲前端周刊 - 第 27 期
下一篇:
redis4.0之module API
maven編譯時出現讀取XXX時出錯invalid LOC header (bad signature)
精準醫療再進一步,機器人成醫生得力助手
ubuntu進行apt-get時候出現Package ssh is not available, but is referred to by another package 錯誤
Qt 5.0 將支持 Android ?
客服是人工智能落地的黃金場景(智能服務圓桌現場實錄)
【播放器--場景】純音頻播放
Delete與truncate的區別
JAVA反射機製
SQL數據類型和C#數據類型間的轉換
幹掉 Whatsapp,隻需4000個微笑?