デバイスが左から右(英語)ではなく右から左の言語(アラビア語など)であるかどうかを判断する方法はありますか?
古いAPIレベル(10まで)と互換性のあるものが必要です
[〜#〜]ソリューション[〜#〜]
受け入れられた回答でxmlメソッドを使用してしまいました。さらに下に、getResources()へのアクセス権がなかった場合のために、ここに示すコードも追加しました
詳細
この質問はまだ多くのトラフィックを得ます。他に指摘したいことがあります:最初にこれを尋ねたとき、RTLとLTRで異なるポインティングシェブロンを表示するのを手助けするのが部分的だったと思います-これを達成するもう1つの洗練された方法は、標準にドローアブルリソースを配置してldrtl
ディレクトリ-どのコードを表示するかを決定するために必要なコードがないことを意味します!
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は、特定の設定(言語など)が右から左に読む言語であるデバイスでのみ使用されます。
私はこれがより良い方法だと思います:
val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR
ドキュメント:
または、minAPI 17以降を使用している場合は、これを使用できます。
val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR
ドキュメント:
Gr、もう少しググって、投稿する前に見つけたでしょう。
if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
// ...
}
else {
// ...
}
アプリのレイアウト方向を検出するための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")
}
これでもかなりのトラフィックが発生する場合は、API 17以降の場合、Configuration.getLayoutDirection()も検討する必要があります。 LayoutDirection.LTRまたはLayoutDirection.RTLを返します。 ViewCompat.getLayoutDirection(Android.view.View)が特定のビューのレイアウトに実際に使用された方向を返すと思います。チャット画面のどちら側にいるのか(私のように)を決定するなど、奇妙なことをしている場合は、これが役に立つかもしれません。
はい、Bidi.getBaseLevel()関数を使用すると、左から右に0、右から左に1が返されます。
http://developer.Android.com/reference/Java/text/Bidi.html#getBaseLevel()