在安卓應用上支援從右到左(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 來顯示該語言。
相關文章
- css佈局-實現左中右佈局的5種方式CSS
- 兩欄佈局,左側可伸縮,右側寬度自適應
- 左側固定,右側自適應的佈局方式理解margin負值理論
- 左側固定,右側自適應的佈局方式(新增評論區大佬教的方法)
- 實現左側固定寬度, 右側自適應的兩欄佈局常見方法
- 5G在左, AI在右AI
- 彈性盒佈局之從左往右,空間不夠換行繼續從左往右(從左往右,從上往下,between效果)
- win10右鍵選單出現左邊如何恢復到右邊_win10右鍵選單在左邊怎麼改回右邊Win10
- 行從左到右遞增,列從上到下遞增,找目標值
- 左值、左值引用、右值、右值引用
- 如何實現兩欄佈局,右側自適應?三欄佈局中間自適應呢?
- 從DoorDash安卓應用中學到的8個技巧安卓
- 在vue中封裝一個從右至左滾動公告的元件Vue封裝元件
- 安卓程式碼、圖片和佈局最佳化安卓
- 左值、右值、左值引用,右值引用,std::move函式函式
- CSS佈局 --- 自適應佈局CSS
- css-前端實現左中右三欄佈局的常用方法:絕對定位,聖盃,雙飛翼,flex,table-cell,網格佈局等CSS前端Flex
- css經典佈局之左側固定大小右側自動適應CSS
- [譯] 從原型圖到成品:步步深入 CSS 佈局原型CSS
- 安卓版 Google Sheets 表格應用支援滑鼠操作安卓Go
- 如何控制 LinearLayout 優先顯示右邊的佈局,空間不足時擠壓左邊控制元件?控制元件
- GPT 輔助寫更精準用例之 從左到右流程圖 解決隨筆GPT流程圖
- 安卓程式碼、圖片、佈局、網路和電量優化安卓優化
- TRIZ在專利佈局中的應用
- JavaScript 左值與右值JavaScript
- 左兒子和右兄弟
- win10右鍵選單顯示在左邊怎麼辦 win10滑鼠右鍵出現在左邊如何恢復Win10
- Flutter 開發從 0 到 1(三)佈局與 ListViewFlutterView
- 兩列布局(左邊定寬,右邊自適應)
- flex彈性佈局 響應式佈局Flex
- 三欄佈局之自適應佈局
- 二分查詢的左閉右開和左閉右閉寫法
- 三列自適應佈局(聖盃佈局)
- Activity 從啟動到佈局繪製的簡單分析
- Activity從啟動到佈局繪製的簡單分析
- C++ 左值和右值C++
- 左邊固定寬,右邊自適應的6種方法
- Flex佈局應用Flex
- 響應式佈局