2017-04-25 162 views
0

我的應用程序必須在將來支持RTL和LTR語言,但現在只是RTLs。當我在每個佈局中使用​​和android:layoutDirection="end"時,NavigationView和Toolbar以及其他一切都很好。在使用android:supportsRTL =「true」時禁用自動更改佈局方向

但唯一的問題是,當用戶將系統語言更改爲LTR語言時,由於佈局方向改變,一切都會出錯。

我需要什麼:我必須設置supportsRTL:「true」。當用戶在啓動時選擇「應用程序」語言而不是根據操作系統語言時,我需要以編程方式更改佈局方向。

問題:是否有任何方法通過更改操作系統語言(而不是通過設置supportsRTL false)來防止自動更改佈局方向?

見下面的圖片:

supportsRTL="true", RTL vs LTR

如果我設置android:supportRTL="false",只是設計了RTL,工具欄和導航菜單方向將是我新的麻煩佈局。

見下文圖像:

supportsRTL="false"

+0

請幫助我停下幾天。 TNX – Abolfazl

回答

2

解決。這只是一個微小的可怕錯誤。

但對於任何人誰有一些問題一樣,我有這個打算在Android版本非常貝爾工作17以上,預17我覺得唯一的辦法就是使用RTL和LTR獨立的佈局。

如果你在你的清單以使用​​則:
1.如果你想只支持RTL語言,根據操作系統語言從改變方向,以防止: 只是簡單地添加android:layoutDirection="rtl"所有的父你的佈局(你也可以使用主題styles.xmllike this)。 或進行子活性,延長從它所有的活動,然後把這個代碼在它的onCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     Configuration configuration = getResources().getConfiguration(); 
      configuration.setLayoutDirection(new Locale("fa")); 
     getResources().updateConfiguration(configuration, getResources().getDisplayMetrics()); 
    } 

但在我的腦海裏,最好的方向設定爲rtl每個佈局,因爲你可以看到它是如何的去看看沒有你運行的應用程序。

2.如果你想支持RTL和LTR語言,當然不會在你的佈局中使用android:layoutDirection="rtl/ltr"因爲它的方向不會甚至更改代碼的任何方式。因爲它會沿着方向rtlltr修復它。所以你應該使用第二個。讓一個子活動,並延伸了這一切的活動,然後把這個代碼是(這只是舉例):

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     Configuration configuration = getResources().getConfiguration(); 
     if (isSlectedLanguageRTL) { 
      configuration.setLayoutDirection(new Locale("fa")); 
     } else { 
      configuration.setLayoutDirection(Locale.ENGLISH); 
     } 
     getResources().updateConfiguration(configuration, getResources().getDisplayMetrics()); 
    } 

,並在年底,對不起我的英文:)