重慶網(wǎng)站制作哪家好搜索引擎都有哪些
參考
google官網(wǎng): 支持不同的語(yǔ)言和文化
應(yīng)用包含可能專(zhuān)門(mén)針對(duì)特定文化而設(shè)計(jì)的資源。例如,應(yīng)用可以包含針對(duì)特定文化的字符串,這些字符串將轉(zhuǎn)換為當(dāng)前語(yǔ)言區(qū)域的語(yǔ)言。
將具有文化特異性的資源與應(yīng)用的其他資源分開(kāi)是一種很好的做法。Android 會(huì)根據(jù)系統(tǒng)語(yǔ)言區(qū)域設(shè)置解析特定于語(yǔ)言和文化的資源。您可以使用 Android 項(xiàng)目中的資源目錄為不同的語(yǔ)言區(qū)域提供支持。
您可以指定相關(guān)資源,此類(lèi)資源根據(jù)使用應(yīng)用的用戶(hù)的文化量身定制。您可以提供適合用戶(hù)的語(yǔ)言和文化的任何資源類(lèi)型。例如,以下屏幕截圖展示了應(yīng)用在設(shè)備的默認(rèn) en_US 語(yǔ)言區(qū)域和西班牙語(yǔ) es_ES 語(yǔ)言區(qū)域中顯示的字符串和可繪制資源。
圖 1. 應(yīng)用根據(jù)當(dāng)前的語(yǔ)言區(qū)域使用不同的資源
當(dāng)您使用 Android SDK 工具創(chuàng)建項(xiàng)目時(shí),相應(yīng)工具會(huì)在項(xiàng)目的頂層生成一個(gè) res/ 目錄。此 res/ 目錄中包含用于存放各類(lèi)資源的子目錄。此外,還包含幾個(gè)默認(rèn)文件(如 res/values/strings.xml),用于存放您的字符串值。
支持不同的語(yǔ)言不僅僅是使用特定于語(yǔ)言區(qū)域的資源。某些用戶(hù)為其界面語(yǔ)言區(qū)域選擇的語(yǔ)言(如阿拉伯語(yǔ)或希伯來(lái)語(yǔ))使用從右到左 (RTL) 腳本。如果用戶(hù)將界面語(yǔ)言區(qū)域設(shè)置為使用 LTR 腳本的語(yǔ)言(例如英語(yǔ)),則可以用使用 RTL 腳本的語(yǔ)言查看或生成內(nèi)容。若要同時(shí)支持這兩類(lèi)用戶(hù),您的應(yīng)用需要執(zhí)行以下操作:
- 對(duì) RTL 語(yǔ)言區(qū)域采用 RTL 界面布局。
- 檢測(cè)并聲明在設(shè)置了格式的消息中顯示的文本數(shù)據(jù)的方向。通常,您可以按照本指南中的說(shuō)明調(diào)用某種方法,由該方法決定文本數(shù)據(jù)的方向。
創(chuàng)建語(yǔ)言區(qū)域目錄和資源文件
如需添加對(duì)更多語(yǔ)言區(qū)域的支持,請(qǐng)?jiān)?res/ 內(nèi)創(chuàng)建其他目錄。每個(gè)目錄的名稱(chēng)都必須遵循以下格式:
<resource type>-b+<language code>[+<country code>]
例如,values-b+es/ 包含語(yǔ)言代碼為 es 的語(yǔ)言區(qū)域字符串資源。
與之類(lèi)似,mipmap-b+es+ES/ 包含語(yǔ)言代碼為 es、國(guó)家/地區(qū)代碼為 ES 的語(yǔ)言區(qū)域圖標(biāo)。
Android 在運(yùn)行時(shí)根據(jù)設(shè)備的語(yǔ)言區(qū)域設(shè)置加載適當(dāng)?shù)馁Y源。如需了解詳情,請(qǐng)參閱提供備用資源。
決定要支持的語(yǔ)言區(qū)域后,請(qǐng)創(chuàng)建資源子目錄和文件。例如:
MyProject/res/values/strings.xmlvalues-b+es/strings.xmlmipmap/country_flag.pngmipmap-b+es+ES/country_flag.png
使用本地化資源填充資源文件。以下是本地化字符串和圖片資源文件的示例:
/values/strings.xml 中的英語(yǔ)字符串(默認(rèn)語(yǔ)言區(qū)域):
<resources><string name="hello_world">Hello World!</string>
</resources>
/values-b+es/strings.xml 中的西班牙語(yǔ)字符串(es 語(yǔ)言區(qū)域):
<resources><string name="hello_world">?Hola Mundo!</string>
</resources>
/mipmap/country_flag.png 中的美國(guó)國(guó)旗圖標(biāo)(默認(rèn)語(yǔ)言區(qū)域):
圖 2. 用于默認(rèn) (en_US) 語(yǔ)言區(qū)域的圖標(biāo)。
/mipmap-b+es+ES/country_flag.png 中的西班牙國(guó)旗圖標(biāo)(es_ES 語(yǔ)言區(qū)域):
圖 3. 用于 es_ES 語(yǔ)言區(qū)域的圖標(biāo)。
注意:您可以對(duì)任何資源類(lèi)型使用配置限定符,例如語(yǔ)言區(qū)域限定符。例如,您可能需要提供可繪制位圖資源的本地化版本。如需了解詳情,請(qǐng)參閱本地化您的應(yīng)用。
使用應(yīng)用中的資源
您可以使用每個(gè)資源的 name 屬性,在源代碼和其他 XML 文件中引用相應(yīng)的資源:R..。有多種方法以這種方式接受資源,如以下示例所示:
// Get a string resource
String hello = getResources().getString(R.string.hello_world);// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);
在其他 XML 文件中,只要 XML 屬性接受兼容的值,您就可以使用 @/ 語(yǔ)法引用資源,如以下示例所示:
<ImageViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/country_flag" />
注意:為確保正確設(shè)置用戶(hù)語(yǔ)言設(shè)置的優(yōu)先級(jí),請(qǐng)使用 resConfigs 屬性指定應(yīng)用支持的語(yǔ)言。如需了解詳情,請(qǐng)參閱指定應(yīng)用支持的語(yǔ)言。
設(shè)置消息中文本的格式
應(yīng)用中最常見(jiàn)的任務(wù)之一就是設(shè)置文本的格式。將文本和數(shù)字?jǐn)?shù)據(jù)插入適當(dāng)?shù)奈恢?#xff0c;即可設(shè)置本地化消息的格式。遺憾的是,在處理 RTL 界面或 RTL 數(shù)據(jù)時(shí),簡(jiǎn)單的格式設(shè)置可能會(huì)顯示不正確甚至無(wú)法讀取的文本輸出。
阿拉伯語(yǔ)、希伯來(lái)語(yǔ)、波斯語(yǔ)和烏爾都語(yǔ)等語(yǔ)言按 RTL 方向編寫(xiě)。不過(guò),某些元素(如數(shù)字和嵌入式 LTR 文本)卻在 RTL 文本中按 LTR 方向編寫(xiě)。使用 LTR 腳本的語(yǔ)言(包括英語(yǔ))也是雙向的,因?yàn)樗鼈兛梢园枰?RTL 方向顯示的嵌入式 RTL 腳本。
應(yīng)用經(jīng)常會(huì)生成此類(lèi)嵌入式反向文本的實(shí)例,例如通過(guò)將任意語(yǔ)言和任意文本方向的文本數(shù)據(jù)插入到本地化消息中。這樣混合方向時(shí),通常不會(huì)明確指出反向文本的開(kāi)始和結(jié)束位置,因此應(yīng)用生成的文本可能會(huì)導(dǎo)致用戶(hù)體驗(yàn)不佳。
雖然系統(tǒng)對(duì)雙向文本的默認(rèn)處理方式通常會(huì)按預(yù)期呈現(xiàn)文本,但是當(dāng)您的應(yīng)用將文本插入本地化消息時(shí),文本有可能無(wú)法正確呈現(xiàn)。下面的示例說(shuō)明了文本可能錯(cuò)誤呈現(xiàn)的情況:
- 在消息開(kāi)頭插入的文本:
PERSON_NAME 正在呼叫您
- 以數(shù)字開(kāi)頭的文本,例如地址或電話號(hào)碼:
987 654-3210
- 以標(biāo)點(diǎn)符號(hào)開(kāi)頭的文本,例如電話號(hào)碼:
+19876543210
- 以標(biāo)點(diǎn)符號(hào)結(jié)尾的文本:
確定嗎?
- 已包含兩個(gè)書(shū)寫(xiě)方向的文本:
???? 一詞是希伯來(lái)語(yǔ),意思是香蕉。
示例
假設(shè)某個(gè)應(yīng)用有時(shí)需要顯示消息“您是不是要找 %s?”,并在運(yùn)行時(shí)插入地址來(lái)代替 %s。由于該應(yīng)用支持不同的界面語(yǔ)言區(qū)域,因此該消息來(lái)自特定于語(yǔ)言區(qū)域的資源,并在設(shè)備設(shè)置為 RTL 語(yǔ)言區(qū)域時(shí)使用 RTL 方向。例如,對(duì)于希伯來(lái)語(yǔ)界面,消息如下所示:
??? ??????? ? %s?
不過(guò),建議地址所在的數(shù)據(jù)庫(kù)可能不包含采用相應(yīng)語(yǔ)言區(qū)域的語(yǔ)言的文本。例如,如果相關(guān)地址是加利福尼亞州某個(gè)地方的地址,那么它會(huì)使用英語(yǔ)文本顯示在數(shù)據(jù)庫(kù)中。如果您將地址“15 Bay Street, Laurel, CA”插入 RTL 消息而不提供任何有關(guān)文本方向的提示,那么結(jié)果會(huì)不符合預(yù)期或不正確:
??? ??????? ? 15 Bay Street, Laurel, CA?
門(mén)牌號(hào)顯示在地址的右側(cè),而不是像預(yù)期那樣顯示在左側(cè)。這使門(mén)牌號(hào)看起來(lái)更像一個(gè)奇怪的郵政編碼。如果在使用 LTR 文本方向的消息中包含 RTL 文本,可能會(huì)出現(xiàn)同樣的問(wèn)題。
解釋說(shuō)明和解決方案
之所以出現(xiàn)此例中的問(wèn)題,是因?yàn)槲谋靖袷皆O(shè)置工具沒(méi)有指定“15”是地址的一部分,因此系統(tǒng)無(wú)法確定“15”是它前面的 RTL 文本的一部分,還是它后面的 LTR 文本的一部分。
若要解決此問(wèn)題,請(qǐng)使用 BidiFormatter 類(lèi)中的 unicodeWrap() 方法。此方法檢測(cè)字符串的方向,并以用來(lái)聲明該方向的 Unicode 格式字符封裝該字符串。
以下代碼段展示了如何使用 unicodeWrap():
String mySuggestion = "15 Bay Street, Laurel, CA";
BidiFormatter myBidiFormatter = BidiFormatter.getInstance();// The "did_you_mean" localized string resource includes
// a "%s" placeholder for the suggestion.
String.format(getString(R.string.did_you_mean),myBidiFormatter.unicodeWrap(mySuggestion));
由于“15”現(xiàn)在出現(xiàn)在聲明為 LTR 的文本中,因此它顯示在正確的位置:
??? ??????? ? 15 Bay Street, Laurel, CA?
請(qǐng)對(duì)插入本地化消息的每段文本使用 unicodeWrap() 方法,但以下情況除外:
- 正在將文本插入機(jī)器可讀的字符串,如 URI 或 SQL 查詢(xún)。
- 您知道這段文本已正確換行。
注意:如果您的應(yīng)用以 Android 4.3(API 級(jí)別 18)或更高版本為目標(biāo)平臺(tái),請(qǐng)使用 Android 框架中的 BidiFormatter 版本。否則,請(qǐng)使用支持庫(kù)中的 BidiFormatter 版本。
設(shè)置數(shù)字的格式
您可以使用格式字符串(而非方法調(diào)用)在應(yīng)用的邏輯中將數(shù)字轉(zhuǎn)換為字符串:
String myIntAsString = String.format("%d", myInt);
這種方案會(huì)根據(jù)您的語(yǔ)言區(qū)域適當(dāng)?shù)卦O(shè)置數(shù)字格式,可能包括使用不同的數(shù)字集。
當(dāng)您使用 String.format() 在某個(gè)設(shè)備上創(chuàng)建 SQL 查詢(xún)并且該設(shè)備設(shè)置的語(yǔ)言區(qū)域(如波斯語(yǔ)和大多數(shù)阿拉伯語(yǔ)語(yǔ)言區(qū)域)使用其自己的數(shù)字集時(shí),如果查詢(xún)的任何參數(shù)是數(shù)字,就會(huì)出現(xiàn)問(wèn)題。這是因?yàn)樽鳛閰?shù)的數(shù)字設(shè)置成了該語(yǔ)言區(qū)域的數(shù)字格式,而該語(yǔ)言區(qū)域的這些數(shù)字在 SQL 中無(wú)效。
如需保留 ASCII 格式的數(shù)字并使 SQL 查詢(xún)保持有效,您需要改用包含語(yǔ)言區(qū)域作為第一個(gè)參數(shù)的 String.format() 過(guò)載版本。使用語(yǔ)言區(qū)域參數(shù) Locale.US。
支持布局鏡像
使用 RTL 腳本的用戶(hù)更喜歡 RTL 界面,這種界面包含右對(duì)齊菜單、右對(duì)齊文本和指向左側(cè)的向前箭頭。
圖 4 顯示了“設(shè)置”應(yīng)用中某個(gè)屏幕的 LTR 版本與對(duì)應(yīng)的 RTL 版本之間的對(duì)比:
通知區(qū)域靠近右上角右對(duì)齊,應(yīng)用欄中的菜單按鈕靠近左上角,屏幕主要部分中的內(nèi)容左對(duì)齊且按 LTR 顯示,后退按鈕靠近左下角且指向左側(cè)。通知區(qū)域靠近左上角左對(duì)齊,應(yīng)用欄中的菜單按鈕靠近右上角,屏幕主要部分中的內(nèi)容右對(duì)齊且按 RTL 顯示,返回按鈕靠近右下角且指向右側(cè)。
圖 4. 設(shè)置屏幕的 LTR 和 RTL 變體。
向您的應(yīng)用添加 RTL 支持時(shí),請(qǐng)記住以下幾點(diǎn):
- 只有在搭載 Android 4.2(API 級(jí)別 17)或更高版本的設(shè)備上使用時(shí),才會(huì)在應(yīng)用中支持 RTL 文本鏡像。如需了解如何在舊款設(shè)備上支持文本鏡像,請(qǐng)參閱本指南中的對(duì)舊版應(yīng)用提供支持。
- 如要測(cè)試您的應(yīng)用是否支持 RTL 文本方向,請(qǐng)按本指南中所述的方式使用開(kāi)發(fā)者選項(xiàng)進(jìn)行測(cè)試,并邀請(qǐng)使用 RTL 腳本的用戶(hù)使用您的應(yīng)用。
注意:如需查看與布局鏡像相關(guān)的其他設(shè)計(jì)指南(包括適合鏡像和不適合鏡像的元素的列表),請(qǐng)參閱雙向性 Material Design 指南。
若要鏡像應(yīng)用中的界面布局以使其在 RTL 語(yǔ)言區(qū)域中按 RTL 顯示,請(qǐng)完成下面幾部分中的步驟。
修改 build 和清單文件
請(qǐng)按以下內(nèi)容修改應(yīng)用模塊的 build.gradle 文件和應(yīng)用清單文件:
build.gradle (Module: app)
android {...defaultConfig {targetSdkVersion 17 // Or higher...}
}
AndroidManifest.xml
<manifest ... >...<application ...android:supportsRtl="true"></application>
</manifest>
注意:如果您的應(yīng)用以 Android 4.1.1(API 級(jí)別 16)或更低版本為目標(biāo)平臺(tái),系統(tǒng)會(huì)忽略 android:supportsRtl 屬性,以及在應(yīng)用布局文件中出現(xiàn)的任何 start 和 end 屬性值。在這種情況下,不會(huì)在您的應(yīng)用中自動(dòng)發(fā)生 RTL 布局鏡像。
更新現(xiàn)有資源
在您現(xiàn)有的布局資源文件中分別將 left 和 right 轉(zhuǎn)化為 start 和 end。這樣就能允許框架根據(jù)用戶(hù)的語(yǔ)言設(shè)置對(duì)齊應(yīng)用的界面元素。
注意:在更新資源之前,請(qǐng)了解如何對(duì)舊版應(yīng)用提供支持,或?qū)σ?Android 4.1.1(API 級(jí)別 16)及更低版本為目標(biāo)平臺(tái)的應(yīng)用提供支持。
若要使用框架的 RTL 對(duì)齊功能,請(qǐng)更改表 1 中顯示的布局文件中的屬性。
表 1. 應(yīng)用支持多種文本方向的情況下使用的屬性
僅支持 LTR 的屬性 | 支持 LTR 和 RTL 的屬性 |
---|---|
android:gravity=“l(fā)eft” | android:gravity=“start” |
android:gravity=“right” | android:gravity=“end” |
android:layout_gravity=“l(fā)eft” | android:layout_gravity=“start” |
android:layout_gravity=“right” | android:layout_gravity=“end” |
android:paddingLeft | android:paddingStart |
android:paddingRight | android:paddingEnd |
android:drawableLeft | android:drawableStart |
android:drawableRight | android:drawableEnd |
android:layout_alignLeft | android:layout_alignStart |
android:layout_alignRight | android:layout_alignEnd |
android:layout_marginLeft | android:layout_marginStart |
android:layout_marginRight | android:layout_marginEnd |
android:layout_alignParentLeft | android:layout_alignParentStart |
android:layout_alignParentRight | android:layout_alignParentEnd |
android:layout_toLeftOf | android:layout_toStartOf |
android:layout_toRightOf | android:layout_toEndOf |
表 2 展示了系統(tǒng)如何根據(jù)目標(biāo) SDK 版本處理界面對(duì)齊屬性、是否定義 left 和 right 屬性,以及是否定義 start 和 end 屬性。
表 2. 基于目標(biāo) SDK 版本和已定義屬性的界面元素對(duì)齊行為
是否以 Android 4.2(API 級(jí)別 17)或更高版本為目標(biāo)平臺(tái)? | 是否定義了 left 和 right 屬性? | 是否定義了 start 和 end 屬性? | 結(jié)果 |
---|---|---|---|
是 | 是 | 是 | 使用 start 和 end,替換 left 和 right |
是 | 是 | 否 | 使用 left 和 right |
是 | 否 | 是 | 使用 start 和 end |
否 | 是 | 是 | 使用 left 和 right(忽略 start 和 end) |
否 | 是 | 否 | 使用 left 和 right |
否 | 否 | 是 | start 和 end 解析為 left 和 right |
添加特定于方向和語(yǔ)言的資源
此步驟涉及添加特定版本的布局、可繪制對(duì)象和值資源文件,這些文件包含針對(duì)不同語(yǔ)言和文本方向的自定義值。
在 Android 4.2(API 級(jí)別 17)和更高版本中,您可以使用 -ldrtl (layout-direction-right-to-left) 和 -ldltr (layout-direction-left-to-right) 資源限定符。為了保持與現(xiàn)有資源向后兼容,舊版 Android 系統(tǒng)使用資源的語(yǔ)言限定符推斷正確的文本方向。
假設(shè)您要添加特定的布局文件以支持 RTL 腳本,如希伯來(lái)語(yǔ)、阿拉伯語(yǔ)和波斯語(yǔ)的布局文件。如要完成此操作,請(qǐng)?jiān)谀?res/ 目錄中添加 layout-ldrtl/ 目錄,如下方示例所示:
res/layout/main.xml This layout file is loaded by default.layout-ldrtl/main.xml This layout file is loaded for languages using an RTL text direction, including Arabic, Persian, and Hebrew.
如果要添加專(zhuān)為阿拉伯語(yǔ)文本設(shè)計(jì)的特定版本的布局,目錄結(jié)構(gòu)如下:
res/layout/main.xml This layout file is loaded by default.layout-ar/main.xml This layout file is loaded for Arabic text.layout-ldrtl/main.xml This layout file is loaded only for non-Arabic languages that use an RTL text direction.
注意:特定于語(yǔ)言的資源優(yōu)先于特定于布局方向的資源,而特定于布局方向的資源優(yōu)先于默認(rèn)資源。
使用支持的微件
從 Android 4.2(API 級(jí)別 17)開(kāi)始,大多數(shù)框架界面元素都自動(dòng)支持 RTL 文本方向。但是,也有一些框架元素(如 ViewPager)不支持 RTL 文本方向。
只要在主屏幕微件的對(duì)應(yīng)清單文件中添加屬性賦值 android:supportsRtl=“true”,這些微件就可以支持 RTL 文本方向。
對(duì)舊版應(yīng)用提供支持
如果您的應(yīng)用以 Android 4.1.1(API 級(jí)別 16)或更低版本為目標(biāo)平臺(tái),那么除 start 和 end 之外,還應(yīng)添加 left 和 right 屬性。
如需檢查布局是否需要使用 RTL 文本方向,請(qǐng)使用以下邏輯:
private boolean shouldUseLayoutRtl() {if (android.os.Build.VERSION.SDK_INT >=android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {return View.LAYOUT_DIRECTION_RTL == getLayoutDirection();} else {return false;}
}
注意:為避免兼容性問(wèn)題,請(qǐng)使用 Android SDK Build Tools 23.0.1 或更高版本。
使用開(kāi)發(fā)者選項(xiàng)進(jìn)行測(cè)試
在搭載 Android 4.4(API 級(jí)別 19)或更高版本的設(shè)備上,您可以在設(shè)備上的開(kāi)發(fā)者選項(xiàng)中啟用強(qiáng)制使用從右到左的布局方向。此設(shè)置允許您在 RTL 模式下查看使用 LTR 腳本的文本(如英語(yǔ)文本)。
更新應(yīng)用邏輯
本部分介紹了在為處理多個(gè)文本方向而調(diào)整應(yīng)用時(shí)需要對(duì)應(yīng)用邏輯做出更新的具體方面。
屬性更改
如需處理與 RTL 相關(guān)的任何屬性(如布局方向、布局參數(shù)、內(nèi)邊距、文本方向、文本對(duì)齊或可繪制對(duì)象放置)的更改,請(qǐng)使用 onRtlPropertiesChanged() 回調(diào)。通過(guò)此回調(diào),您可以獲取當(dāng)前的布局方向,并相應(yīng)地更新 activity 的 View 對(duì)象。
View
如果您要?jiǎng)?chuàng)建的界面 widget 不直接屬于 activity 的視圖層次結(jié)構(gòu)(如類(lèi)似于對(duì)話框或消息框的界面元素),請(qǐng)根據(jù)上下文設(shè)置正確的布局方向。以下代碼段演示了如何完成此過(guò)程:
final Configuration config =getContext().getResources().getConfiguration();
view.setLayoutDirection(config.getLayoutDirection());
您需要額外考慮 View 類(lèi)的一些方法:
onMeasure()
視圖測(cè)量數(shù)據(jù)可能會(huì)因文本方向不同而異。
onLayout()
如果您創(chuàng)建自己的布局實(shí)現(xiàn),則需要在您的 onLayout() 版本中調(diào)用 super(),并調(diào)整自定義邏輯以支持 RTL 腳本。
onDraw()
如果您要實(shí)現(xiàn)自定義視圖或向繪圖添加高級(jí)功能,則需要更新代碼以支持 RTL 腳本。您可以使用以下代碼確定 widget 是否處于 RTL 模式:
// On devices running Android 4.1.1 (API level 16) and lower,
// you can call the isLayoutRtl() system method directly.
public boolean isLayoutRtl() {return (getLayoutDirection() == LAYOUT_DIRECTION_RTL);
}
可繪制對(duì)象
如果您有可繪制對(duì)象需要針對(duì) RTL 布局進(jìn)行鏡像,請(qǐng)根據(jù)設(shè)備上搭載的 Android 版本完成以下步驟之一:
- 在搭載 Android 4.3(API 級(jí)別 18)及更低版本的設(shè)備上,添加并定義 -ldrtl 資源文件。
- 在搭載 Android 4.4(API 版本 19)及更高版本的設(shè)備上,在定義可繪制對(duì)象時(shí)使用 android:autoMirrored=“true”,這將使系統(tǒng)能夠?yàn)槟幚?RTL 布局鏡像。
注意:android:autoMirrored 屬性?xún)H適用于簡(jiǎn)單的可繪制對(duì)象,其雙向鏡像只是整個(gè)可繪制對(duì)象的圖形鏡像。如果可繪制對(duì)象包含多個(gè)元素,或者如果反射可繪制對(duì)象會(huì)改變它的解釋,那么您可以自行執(zhí)行鏡像。請(qǐng)盡可能與雙向鏡像方面的專(zhuān)家核實(shí),以確定鏡像的可繪制對(duì)象對(duì)用戶(hù)是否有意義。
Gravity
如果應(yīng)用的布局代碼使用 Gravity.LEFT 或 Gravity.RIGHT,請(qǐng)分別將這些值更改為 Gravity.START 和 Gravity.END。
如果您有 Kotlin 代碼或 Java 代碼依賴(lài)于 Gravity.LEFT 或 Gravity.RIGHT 屬性,您可以將 absoluteGravity 設(shè)置為與 layoutDirection 保持一致,以使其能夠適應(yīng)這項(xiàng)更改。
例如,如果您使用的是以下代碼:
switch (gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {case Gravity.LEFT:// Handle objects that are left-aligned.break;case Gravity.RIGHT:// Handle objects that are right-aligned.break;
}
將其更改為以下代碼:
final int layoutDirection = getLayoutDirection();
final int absoluteGravity =Gravity.getAbsoluteGravity(gravity, layoutDirection);
switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {case Gravity.LEFT:// Handle objects that are left-aligned.break;case Gravity.RIGHT:// Handle objects that are right-aligned.break;
}
這意味著即使您為 gravity 值使用 start 和 end,也可以保留現(xiàn)有代碼,以處理左對(duì)齊和右對(duì)齊的值。
注意:應(yīng)用 gravity 設(shè)置時(shí),請(qǐng)使用包含 layoutDirection 參數(shù)的 Gravity.apply() 過(guò)載版本。
外邊距和內(nèi)邊距
如需在應(yīng)用中支持 RTL 腳本,請(qǐng)遵循下面這些與外邊距和內(nèi)邊距值相關(guān)的最佳做法:
- 使用 getMarginStart() 和 getMarginEnd(),而非特定于方向的等效屬性 leftMargin 和 rightMargin。
- 使用 setMargins() 時(shí),如果您的應(yīng)用檢測(cè)到 RTL 腳本,請(qǐng)交換 left 和 right 參數(shù)的值。
如果您的應(yīng)用包括自定義內(nèi)邊距邏輯,請(qǐng)?zhí)鎿Q setPadding() 和 setPaddingRelative()。
支持各應(yīng)用語(yǔ)言偏好設(shè)定
在許多情況下,多語(yǔ)言用戶(hù)會(huì)將其系統(tǒng)語(yǔ)言設(shè)置為某一種語(yǔ)言(例如英語(yǔ)),但又想為特定應(yīng)用選擇其他語(yǔ)言(例如荷蘭語(yǔ)、中文或印地語(yǔ))。為了幫助應(yīng)用為這些用戶(hù)提供更好的體驗(yàn),Android 13 針對(duì)支持多種語(yǔ)言的應(yīng)用引入了以下功能:
- 系統(tǒng)設(shè)置:用戶(hù)可以在這個(gè)集中位置為每個(gè)應(yīng)用選擇首選語(yǔ)言。
您的應(yīng)用必須在應(yīng)用的清單中聲明 android:localeConfig 屬性,以告知系統(tǒng)它支持多種語(yǔ)言。如需了解詳情,請(qǐng)參閱有關(guān)創(chuàng)建資源文件并在應(yīng)用的清單文件中聲明資源的說(shuō)明。
- 其他 API:借助這些公共 API(例如 LocaleManager 中的 setApplicationLocales() 和 getApplicationLocales() 方法),應(yīng)用可以在運(yùn)行時(shí)設(shè)置不同于系統(tǒng)語(yǔ)言的其他語(yǔ)言。
使用自定義應(yīng)用內(nèi)語(yǔ)言選擇器的應(yīng)用應(yīng)當(dāng)使用這些 API,以確保無(wú)論用戶(hù)通過(guò)何種方式選擇其語(yǔ)言偏好設(shè)置,都能獲得一致的用戶(hù)體驗(yàn)。公共 API 還有助于減少樣板代碼量,并且支持拆分 APK。它們還支持應(yīng)用自動(dòng)備份,以存儲(chǔ)應(yīng)用級(jí)的用戶(hù)語(yǔ)言設(shè)置。
為了向后兼容以前的 Android 版本,AndroidX 中也提供了等效的 API。我們建議使用 Appcompat 1.6.0-beta01 或更高版本。
如需了解詳情,請(qǐng)參閱有關(guān)實(shí)現(xiàn)新 API 的說(shuō)明。