Existe-t-il un moyen de déterminer si le périphérique est dans une langue de droite à gauche (quelque chose comme l’arabe), par opposition à un système de gauche à droite (anglais)?
Quelque chose de compatible avec les anciens niveaux d'API (jusqu'à 10) est nécessaire
SOLUTION
j'ai fini par utiliser la méthode XML dans la réponse acceptée. Plus loin dans la ligne, j'ai également ajouté le code indiqué ici pour les cas où je n'avais pas accès à getResources ()
Identifier le langage RTL sous Android
plus d'infos
Cette question suscite encore beaucoup de trafic. Autre chose que je voulais souligner: quand j’avais posé cette question, j’ai pensé que c’était en partie pour aider à montrer les différents chevrons de pointage dans RTL vs LTR. Une autre manière astucieuse d’y parvenir consiste à placer des ressources exploitables dans les répertoires standard et ldrtl
signifie aucun code requis pour déterminer lequel afficher!
Vous pouvez créer un dossier values-ldrtl avec un fichier xml appelé isrighttoleft.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">true</bool>
</resources>
et dans votre dossier values le même fichier avec:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_right_to_left">false</bool>
</resources>
Et enfin dans le code:
boolean isRightToLeft = getResources().getBoolean(R.bool.is_right_to_left);
Les valeurs-ldrtl ne seront utilisées que sur un périphérique où les paramètres spécifiques (par exemple, Langue) sont des langues de droite à gauche.
Je pense que c'est une meilleure façon:
val isLeftToRight = TextUtilsCompat.getLayoutDirectionFromLocale(Locale.getDefault()) == ViewCompat.LAYOUT_DIRECTION_LTR
Docs:
Ou, si vous avez minAPI 17 ou supérieur, vous pouvez simplement utiliser ceci:
val isLeftToRight=TextUtils.getLayoutDirectionFromLocale(Locale.getDefault())==View.LAYOUT_DIRECTION_LTR
Docs:
Gr, un peu plus longtemps googler et je l'aurais trouvé avant de poster:
if (ViewCompat.getLayoutDirection(getView()) == ViewCompat.LAYOUT_DIRECTION_LTR) {
// ...
}
else {
// ...
}
Si cela génère toujours un trafic considérable, les utilisateurs doivent également envisager Configuration.getLayoutDirection (), pour l'API 17+. Il renverra soit LayoutDirection.LTR ou LayoutDirection.RTL. J'imagine que ViewCompat.getLayoutDirection (Android.view.View) renvoie la direction réellement utilisée pour mettre en forme une vue particulière. Si vous faites quelque chose de bizarre, comme tenter de déterminer quelle personne doit figurer de quel côté d'un écran de discussion (comme moi), cela peut être utile.
Kotlin Code pour détecter la direction de la mise en page de l'application:
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")
}
Oui, utilisez la fonction Bidi.getBaseLevel (), elle retournera 0 pour gauche à droite et 1 pour droite à gauche.
http://developer.Android.com/reference/Java/text/Bidi.html#getBaseLevel ()