web-dev-qa-db-ja.com

androidデバイスが右から左の言語/レイアウトであるかどうかを決定します

デバイスが左から右(英語)ではなく右から左の言語(アラビア語など)であるかどうかを判断する方法はありますか?

古いAPIレベル(10まで)と互換性のあるものが必要です

[〜#〜]ソリューション[〜#〜]

受け入れられた回答でxmlメソッドを使用してしまいました。さらに下に、getResources()へのアクセス権がなかった場合のために、ここに示すコードも追加しました

AndroidでRTL言語を識別する

詳細

この質問はまだ多くのトラフィックを得ます。他に指摘したいことがあります:最初にこれを尋ねたとき、RTLとLTRで異なるポインティングシェブロンを表示するのを手助けするのが部分的だったと思います-これを達成するもう1つの洗練された方法は、標準にドローアブルリソースを配置してldrtlディレクトリ-どのコードを表示するかを決定するために必要なコードがないことを意味します!

26
joshkendrick

Isrighttoleft.xmlというxmlファイルでvalues-ldrtlフォルダーを作成できます。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_right_to_left">true</bool>
</resources>

そして、あなたのvaluesフォルダに同じファイルを入れます:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_right_to_left">false</bool>
</resources>

そして最後にコードで:

boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left);

Values-ldrtlは、特定の設定(言語など)が右から左に読む言語であるデバイスでのみ使用されます。

49
ezcoding

私はこれがより良い方法だと思います:

val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR

ドキュメント:

https://developer.Android.com/reference/Android/support/v4/text/TextUtilsCompat.html#getLayoutDirectionFromLocale(Java.util.Locale)

または、minAPI 17以降を使用している場合は、これを使用できます。

val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR

ドキュメント:

https://developer.Android.com/reference/Android/text/TextUtils.html#getLayoutDirectionFromLocale(Java.util.Locale)

25

Gr、もう少しググって、投稿する前に見つけたでしょう。

if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
    // ...
}
else {
    // ...
}

http://developer.Android.com/reference/Android/support/v4/view/ViewCompat.html#getLayoutDirection(Android.view.View)

16
joshkendrick

アプリのレイアウト方向を検出するためのKotlinコード:

 val config = resources.configuration
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        if (config.layoutDirection == View.LAYOUT_DIRECTION_LTR) {
           // showAlertMsg("LTR")
        } else {
           // showAlertMsg( "RTL")
        }
    }
    else {
        //TODO("VERSION.SDK_INT < JELLY_BEAN_MR1")
           }
4
Hamed Jaliliani

これでもかなりのトラフィックが発生する場合は、API 17以降の場合、Configuration.getLayoutDirection()も検討する必要があります。 LayoutDirection.LTRまたはLayoutDirection.RTLを返します。 ViewCompat.getLayoutDirection(Android.view.View)が特定のビューのレイアウトに実際に使用された方向を返すと思います。チャット画面のどちら側にいるのか(私のように)を決定するなど、奇妙なことをしている場合は、これが役に立つかもしれません。

2
androidguy

はい、Bidi.getBaseLevel()関数を使用すると、左から右に0、右から左に1が返されます。

http://developer.Android.com/reference/Java/text/Bidi.html#getBaseLevel()

0
HappyCactus