web-dev-qa-db-fra.com

android détermine si l'appareil est dans la langue/la disposition de droite à gauche

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!

23
joshkendrick

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.

46
ezcoding

Je pense que c'est une meilleure façon:

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

Docs:

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

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:

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

19

Gr, un peu plus longtemps googler et je l'aurais trouvé avant de poster:

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

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

13
joshkendrick

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.

1
androidguy

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")
           }
0
Hamed Jaliliani

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 ()

0
HappyCactus