2013-07-07 40 views
14

我正在爲從右到左的特定語言創建一個Android應用程序。我使用ActionBarSherlock(兼容的Android操作欄庫)。
我確切需要的是如何將操作欄的方向更改爲RTL,即使用戶未將缺省Locale設置爲RTL語言。
如果任何人有一個想法,即使是標準的安卓操作欄它是有價值的,可能會幫助請分享它。
謝謝將動作欄方向更改爲從右到左

+0

你找到解決辦法嗎? –

+0

我還沒有找到一個好的解決方案,但我還沒有測試'semsamot'關於'RTLizer'的解決方案。 如果您測試過,請告訴我相關信息。謝謝。 – Aliaaa

回答

1

我相當肯定你不能做你在問什麼。 ActionBar模式非常具體,支持它的庫只支持定義的模式(在左上角有圖標,然後在右側放置標題和動作按鈕)。

更改測試與更改應用中的語言環境和文本一樣簡單(正如您已經提到的那樣)。

支持標準ActionBar模式的庫不支持更改ActionBar內部元素的位置 - 因爲您描述的不是受支持的UI模式。

我想你應該離開AB原樣。沒有必要切換訂單,因爲無論如何都沒有左右定位 - 並且改變這一點對您的用戶來說會非常棘手。底線,你將無法對現有的庫進行這種操作 - 而且你也許不應該這樣做。

+0

但其他人很好看看這個: https://play.google.com/store/apps/details?id=com.hamrahyar.nabzebazaar – Aliaaa

+0

我的猜測是他們使用自定義佈局來創建此元素本身。我認爲本地(或ActionBarSherlock)實現在這個時候不支持這個(會看到是否有人有不同的答案)。 – Booger

+0

@Booger現在有可能! (請參閱我的回答) – semsamot

52

從Android API級別17+它本身支持RTL。要強制你的整個佈局是包括ActionBar在內的RTL,請執行以下操作。

編輯AndroidManifest.xml中添加android:supportsRtl="true"<application>標記,然後將下面的行添加到您的活動的onCreate的頂部()方法forceRTLIfSupported();然後將後續功能爲您的活動。

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) 
private void forceRTLIfSupported() 
{ 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); 
    } 
} 

當然這隻對調試很有幫助。使用View.LAYOUT_DIRECTION_LOCALE進行生產構建,因此只有當用戶選擇的系統位置/語言(即語言環境)支持RTL時,纔會更改佈局。

希望有所幫助。

+1

感謝您的回答。但是,如果答案存在,我需要一個答案來支持較低版本的sdk版本! – Aliaaa

+0

Thanks.Very good。 –

+1

不幸的是它是RTL的所有佈局。我只是想改變操作欄方向而不是所有的應用程序。我可以做什麼? – Kenji

2

Booger是對的。您提到的「Nabz Bazar」應用程序在每個版本的Android上都沒有對齊。正如你所看到的here ABS在Android 4.0或更新版本上並沒有真正做任何事情,並且該應用程序的屏幕截圖在4.2安卓版上。

5

我們必須相信編程功能強大的規則:當你知道你的工具

一切都將成爲可能。

所以,從現在開始你可以使用這個庫真正RTLize您爲其他動作https://github.com/semsamot/ActionBarRTLizer

當然它是與API等級7+兼容。

+0

*無法解析符號'ActionBarRtlizer'*(我想你忘了提及我們應該導入什麼來解決這個問題) –

0

利用這一點,這將是從RTL進行佈局,但你的XML這個在父母根

android:layoutDirection="rtl" 
    android:textDirection="rtl" 
相關問題