android 如何使用android:supportsRtl属性
之前,在app上發現一個問題,就是app設置為阿拉伯語時,手機默認德我布局方向變成了從右往左,導致界面出現了很大的問題。后來通過修改布局,解決了部分界面的問題,但是界面在從右往左時還是顯示的不很好看。于是我打開應用寶,發現應用寶的界面是正常的從左往右布局。所以在網上查找資料,發現了android:supportsRtl屬性,最終解決了這個問題。這里記錄一下。
從Android 4.2開始,Android SDK支持一種從右到左(RTL,Right-to-Left)UI布局的方式,盡管這種布局方式經常被使用在諸如阿拉伯語、希伯來語等環境中,中國用戶很少使用。不過在某些特殊用途中還是很方便的。
這是官網對android:supportsRtl的解釋,英文不太好只能用工具和自己的理解翻譯一下
官網原文鏈接: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是否愿意支持從右到左(原來RTL就是right-to-left 的縮寫...)的布局。
如果設置為true,targetSdkVersion設置為17或更高,各種RTL的API將被激活,系統使用您的應用程序可以顯示RTL布局。如果targetSdkVersion設置為16或更低的設置為false,RTL的API將被忽略或沒有影響您的應用程序將具有相同的行為無論對用戶現場的選擇相關的布局方向(你的布局會從左至右)。
此屬性的默認值是false。
此屬性被添加到API 17。
最后一句也說了,這個api是17(也就是Android4.2)以后才有的,并且這個屬性默認是false,17以前的api不支持這個屬性。
那這個支持從右到左的布局到底是個什么鬼呢。
經常玩機的朋友應該有發現,在設置-開發人員選項,有一個強制使用從右到左的布局方向,如圖
既然有這么個東西,那就打開看看
打開之后變成這樣了,原先在左邊的文字被放到右邊去了,在右邊的開關,也被放到左邊了,看到這個就明白了這個屬性的意思了吧
為了證明這個屬性,再弄個demo試試
當android:supportsRtl為false的時候,即使手機開啟了強制從右到左,app的布局也不會改變,如圖
當android:supportsRtl為true的時候,并且手機也開啟了強制從右到左的開關,那么布局就會從右到左來排列了,如圖
如果要使用RTL布局,還應該注意一個重要的問題。假設一個水平線性布局中有兩個<TextView>標簽:TextView1和TextView2。TextView1位于窗口的左上角,而TextVew2在TextView1的右側,到TextView1的距離是100dp。實際上就是TextView2的左邊緣到TextView1的右邊緣的距離。如果當前是默認布局方式(LTR,從左到右,Left-to-Right),只需要將TextView2的android:layout_marginLeft屬性值設為"100dp"即可。不過這在RTL布局中卻恰好相反。在RTL布局中,TextView1在窗口的右上角,而TextView2卻跑到了TextView1的左側,所以TextView2到TextView1的距離實際上變成了TextView2的右邊緣到TextView1的左邊緣的距離。因此應該設置TextView2的android:layout_marginRight屬性,這樣就會造成RTL和LTR兩種布局模式中UI排列的混亂。為了解決這個問題,在Android 4.2中新加了如下兩個布局屬性。
android:layout_marginStart:如果在LTR布局模式下,該屬性等同于android:layout_marginLeft。如果在RTL布局模式下,該屬性等同于android:layout_marginRight。
android:layout_marginEnd:如果在LTR布局模式下,該屬性等同于android:layout_marginRight。如果在RTL布局模式下,該屬性等同于android:layout_marginLeft。
簡單講講,其實android:supportsRtl屬性就是表明app是否支持從右往左的布局,如果把這個屬性默認是false,那么app在任何情況下都不會出現從右往左的布局。如果把這個屬性默認是true,并且targetSdkVersion設置為17或更高時,那么當手機在諸如阿拉伯語、希伯來語等環境中,會自動修改為從右往左的布局。其實我就是android:supportsRtl=“false”解決了從右往左的問題。
android 如何使用android:supportsRtl屬性就講完了。
就這么簡單。
總結
以上是生活随笔為你收集整理的android 如何使用android:supportsRtl属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 解决String.for
- 下一篇: android Formatter 的使