web-dev-qa-db-ja.com

アクションバーの方向を右から左に変更する

Androidアプリを作成しています。ActionBarSherlock(互換性のあるAndroidアクションバーライブラリ))を使用しています。
ユーザーがデフォルトのロケールであるRTL言語を設定していなくても、アクションバーの方向をRTLに変更する方法が正確に必要です。
標準のAndroidアクションバー)についてさえ誰かがアイデアを持っている場合、それは価値があり、それを共有するのに役立つ場合があります。
ありがとう

18
Aliaaa

Android APIレベル17以降)からネイティブにRTLをサポートします。レイアウト全体を強制的にActionBarを含むRTLにするには、次のようにします。

AndroidManifest.xmlを編集して_Android:supportsRtl="true"_を_<application>_タグに追加し、アクティビティのonCreate()メソッドforceRTLIfSupported();の先頭に次の行を追加して、follow関数を挿入しますあなたの活動に。

_@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をサポートしている場合にのみレイアウトが変更されるようにします。

お役に立てば幸いです。

62
Simon

私たちはプログラミングにおける強力なルールを信じなければなりません:

ツールを知っていれば、すべてが可能になります。

したがって、これからこのライブラリを使用して、本当にアクションバーをRTL化できますhttps://github.com/semsamot/ActionBarRTLizer =

そしてもちろん、APIレベル7 +と互換性があります。

4
semsamot

これを使用すると、RTLからレイアウトが作成されますが、これはXMLの親ルートにあります

    Android:layoutDirection="rtl"
    Android:textDirection="rtl"
2
Amal Kronz

Boogerは正しいです。おっしゃった「Nabz Bazar」アプリは、Androidのすべてのバージョンで正しく機能しません。ご覧のとおり here ABSは実際には何もしませんAndroid 4.0以降で、そのアプリのスクリーンショットは4.2 Androidにあります。

2
Dariush Malek

私はあなたがあなたが求めていることをすることができないだろうと確信しています。 ActionBarパターンは非常に具体的であり、それをサポートするライブラリは、定義されたパターンのみをサポートします(左上にアイコンがあり、タイトルとアクションボタンが右側に配置されています)。

テストの変更は、アプリのロケールとテキストを変更するのと同じくらい簡単です(既におっしゃったように)。

ActionBar自体の中で要素の位置を変更することは、標準のActionBarパターンをサポートするライブラリではサポートされません-説明したものがサポートされているUIパターンではないためです。

ABはそのままにしておくべきだと思います。いずれにしても、右から左への向きがないため、順序を切り替える必要はありません。これを変更すると、ユーザーにとって非常に不快になります。

結論として、既存のライブラリではこれを行うことができなくなります-とにかくそうすべきではありません。

1
Booger