android 如何使用android:supportsRtl属性
之前,在app上發(fā)現(xiàn)一個(gè)問(wèn)題,就是app設(shè)置為阿拉伯語(yǔ)時(shí),手機(jī)默認(rèn)德我布局方向變成了從右往左,導(dǎo)致界面出現(xiàn)了很大的問(wèn)題。后來(lái)通過(guò)修改布局,解決了部分界面的問(wèn)題,但是界面在從右往左時(shí)還是顯示的不很好看。于是我打開(kāi)應(yīng)用寶,發(fā)現(xiàn)應(yīng)用寶的界面是正常的從左往右布局。所以在網(wǎng)上查找資料,發(fā)現(xiàn)了android:supportsRtl屬性,最終解決了這個(gè)問(wèn)題。這里記錄一下。
從Android 4.2開(kāi)始,Android SDK支持一種從右到左(RTL,Right-to-Left)UI布局的方式,盡管這種布局方式經(jīng)常被使用在諸如阿拉伯語(yǔ)、希伯來(lái)語(yǔ)等環(huán)境中,中國(guó)用戶很少使用。不過(guò)在某些特殊用途中還是很方便的。
這是官網(wǎng)對(duì)android:supportsRtl的解釋,英文不太好只能用工具和自己的理解翻譯一下
官網(wǎng)原文鏈接:http://developer.android.com/intl/zh-cn/guide/topics/manifest/application-element.html
android:supportsRtl
Declares whether your application is willing to support right-to-left (RTL) layouts.
If set to true and targetSdkVersion is set to 17 or higher, various RTL APIs will be activated and used by the system so your app can display RTL layouts. If set to false or if targetSdkVersion is set to 16 or lower, the RTL APIs will be ignored or will have no effect and your app will behave the same regardless of the layout direction ass ociated to the user's Locale choice (your layouts will always be left-to-right).
The default value of this attribute is false.
This attribute was added in API level 17.
聲明你的application是否愿意支持從右到左(原來(lái)RTL就是right-to-left 的縮寫(xiě)...)的布局。
如果設(shè)置為true,targetSdkVersion設(shè)置為17或更高,各種RTL的API將被激活,系統(tǒng)使用您的應(yīng)用程序可以顯示RTL布局。如果targetSdkVersion設(shè)置為16或更低的設(shè)置為false,RTL的API將被忽略或沒(méi)有影響您的應(yīng)用程序?qū)⒕哂邢嗤男袨闊o(wú)論對(duì)用戶現(xiàn)場(chǎng)的選擇相關(guān)的布局方向(你的布局會(huì)從左至右)。
此屬性的默認(rèn)值是false。
此屬性被添加到API 17。
最后一句也說(shuō)了,這個(gè)api是17(也就是Android4.2)以后才有的,并且這個(gè)屬性默認(rèn)是false,17以前的api不支持這個(gè)屬性。
那這個(gè)支持從右到左的布局到底是個(gè)什么鬼呢。
經(jīng)常玩機(jī)的朋友應(yīng)該有發(fā)現(xiàn),在設(shè)置-開(kāi)發(fā)人員選項(xiàng),有一個(gè)強(qiáng)制使用從右到左的布局方向,如圖
既然有這么個(gè)東西,那就打開(kāi)看看
打開(kāi)之后變成這樣了,原先在左邊的文字被放到右邊去了,在右邊的開(kāi)關(guān),也被放到左邊了,看到這個(gè)就明白了這個(gè)屬性的意思了吧
為了證明這個(gè)屬性,再弄個(gè)demo試試
當(dāng)android:supportsRtl為false的時(shí)候,即使手機(jī)開(kāi)啟了強(qiáng)制從右到左,app的布局也不會(huì)改變,如圖
當(dāng)android:supportsRtl為true的時(shí)候,并且手機(jī)也開(kāi)啟了強(qiáng)制從右到左的開(kāi)關(guān),那么布局就會(huì)從右到左來(lái)排列了,如圖
如果要使用RTL布局,還應(yīng)該注意一個(gè)重要的問(wèn)題。假設(shè)一個(gè)水平線性布局中有兩個(gè)<TextView>標(biāo)簽:TextView1和TextView2。TextView1位于窗口的左上角,而TextVew2在TextView1的右側(cè),到TextView1的距離是100dp。實(shí)際上就是TextView2的左邊緣到TextView1的右邊緣的距離。如果當(dāng)前是默認(rèn)布局方式(LTR,從左到右,Left-to-Right),只需要將TextView2的android:layout_marginLeft屬性值設(shè)為"100dp"即可。不過(guò)這在RTL布局中卻恰好相反。在RTL布局中,TextView1在窗口的右上角,而TextView2卻跑到了TextView1的左側(cè),所以TextView2到TextView1的距離實(shí)際上變成了TextView2的右邊緣到TextView1的左邊緣的距離。因此應(yīng)該設(shè)置TextView2的android:layout_marginRight屬性,這樣就會(huì)造成RTL和LTR兩種布局模式中UI排列的混亂。為了解決這個(gè)問(wèn)題,在Android 4.2中新加了如下兩個(gè)布局屬性。
android:layout_marginStart:如果在LTR布局模式下,該屬性等同于android:layout_marginLeft。如果在RTL布局模式下,該屬性等同于android:layout_marginRight。
android:layout_marginEnd:如果在LTR布局模式下,該屬性等同于android:layout_marginRight。如果在RTL布局模式下,該屬性等同于android:layout_marginLeft。
簡(jiǎn)單講講,其實(shí)android:supportsRtl屬性就是表明app是否支持從右往左的布局,如果把這個(gè)屬性默認(rèn)是false,那么app在任何情況下都不會(huì)出現(xiàn)從右往左的布局。如果把這個(gè)屬性默認(rèn)是true,并且targetSdkVersion設(shè)置為17或更高時(shí),那么當(dāng)手機(jī)在諸如阿拉伯語(yǔ)、希伯來(lái)語(yǔ)等環(huán)境中,會(huì)自動(dòng)修改為從右往左的布局。其實(shí)我就是android:supportsRtl=“false”解決了從右往左的問(wèn)題。
android 如何使用android:supportsRtl屬性就講完了。
就這么簡(jiǎn)單。
總結(jié)
以上是生活随笔為你收集整理的android 如何使用android:supportsRtl属性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android 解决String.for
- 下一篇: android SQLite数据库的使用