閱讀434 返回首頁    go 阿裏雲 go 技術社區[雲棲]


在安卓應用上支持從右到左(RTL)布局

世界上的大部分語言的書寫方式都是從左到右,但是也有一些語言是從右到左(Right to Left,以下簡稱為 RTL )書寫的,譬如阿拉伯語,希伯來語以及敘利亞語。雖然這些都是小語種,支持RTL能給當地用戶更好的體驗。

Google 官網得知,安卓在SDK17(4.2 Jelly Bean)版本的以上能原生的支持RTL,隻需以下幾個步驟就能實現。

  1. AndroidManifest.xmluses-sdk 標簽中,將 targetSdkVersionminSdkVersion 設為 17 或以上。
  2. AndroidManifest.xmlapplication 標簽中,加入 android:supportsRtl=”true”
  3. 在布局xml文件中,將所有的 leftright 分別改為 startend,比如 android:paddingLeft 改為 android:paddingStart
  4. 由於startend 是安卓4.2以後才支持的,如果應用還要支持安卓4.2以下的舊設備,則須在保留 leftright 的基礎上加入 startend,例如同時保留 android:paddingLeftandroid:paddingStart

如果你是用 Android Studio 的話,隻需從 Refactor 菜單選項裏點 Add RTL Support where possible 就可以一步到位完全上列操作。

同學們你以為這樣就結束的話就 too young too naive 了,安卓的套路大家都知道,哪能這麼容易放過碼農的?讓我們繼續。

安卓的 RTL 引擎會自動將水平布局的排列顛倒,讓 UI 控件的排列順序變為從右到左,如圖所示。

1-U2o787CWvxwi5deBWQbEXA.png

請注意該圖中的圖標沒有左右翻轉,雖然看來也沒有什麼問題,但是如果我們換一個有方向性的圖標呢?請看下圖。

1-VBZGhVg_t1z3OprbfiEszg.png

這樣看起來就有點不對,後退鍵的方向應該指向右邊才是,像這種情況我們隻能手動加入鏡像圖片,並用 ldrtl 後綴告之。假設後退鍵的圖片資源是放在 /res/drawable/ic_back.xml ,它的鏡像圖片的路徑就為 /res/drawable-ldrtl/ic_back.xml

1-zY8bpdRjU0E5CzyoyiWTzA.png

不僅僅是圖片,我們也可以用 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

  上一篇:go  阿裏雲前端周刊 - 第 27 期
  下一篇:go  redis4.0之module API