web-dev-qa-db-fra.com

Mise en page relative alignParentLeft vs alignParentStart

Je suis donc à l'aise avec l'utilisation de dispositions relatives, mais lorsque je me suis habitué à Android Studio, j'ai remarqué que, dans mes vues enfant de disposition relative, les deux éléments suivants étaient générés.

Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true

J'ai vérifié la documentation Android ici , mais je ne peux pas distinguer les deux. Certes, échanger les uns contre les autres dans Android Studio ne montre aucune différence visible. Est-ce qu'il y a un?

14
Andrew S

Cela dépend de la direction de la mise en page. La mise en page peut être orientée de gauche à droite (début = gauche, fin = droite) ou de droite à gauche (vice-versa).

Par défaut, la direction de la présentation est basée sur les paramètres régionaux (de gauche à droite pour les langues telles que l'anglais, de droite à gauche pour les langues telles que l'arabe), mais vous pouvez la remplacer par l'attribut layoutDirection XML ou setLayoutDirection fonction. par exemple.:

Android:layoutDirection="ltr"   

^ rend alignParentStart équivalent à alignParentLeft sur tous les périphériques.

Android:layoutDirection="rtl"   

^ rend alignParentStart équivalent à alignParentRight sur tous les périphériques. Vous pouvez également définir sur "locale" pour utiliser la locale ou "hériter" pour hériter de la direction de la disposition de la vue parent.

Vous devez ajouter Android:supportsRtl="true" à votre AndroidManifest.xml pour prendre en charge les dispositions de droite à gauche.

également lié: Android: textDirection

12
samgak
Android:layout_alignParentStart="true"

Aligne la vue début Edge de this _ sur la vue début de son parent. Ceci est le gauche Edge pour les paramètres régionaux LTR (de gauche à droite) et le droit un sur RTL (de droite à gauche) comme les langues locales, telles que l'arabe, l'hébreu, le persan, etc.

La raison pour laquelle Android Studio ajoute également

Android:layout_alignParentLeft="true"

à vos vues est de prendre en charge les anciennes plates-formes antérieures à 4.2.x Jelly bean. Les attributs Début/Fin tels que layout_alignParentStart ne sont disponibles qu'à partir de l'API 17. Les nouvelles plates-formes se replient sur les attributs gauche/droite uniquement si les attributs début/fin correspondants ne sont pas trouvés.

Dans le cas où votre application prend en charge les plates-formes héritées utilisant Android:minSdkVersion sous le niveau 17, vous devez toujours fournir les attributs gauche/droite pour vos vues. Sinon, le projet ne compilera pas avec un message d'erreur tel que

Pour prendre en charge les versions plus anciennes que l'API 17 (le projet spécifie 7) , Vous devez également ajouter Android: layout_alignParentLeft = "true"

Notez également que votre application Android doit également déclarer sa prise en charge des paramètres régionaux RTL dans votre AndroidManifest.xml.

<application
    ...
    Android:supportsRtl="true"
/>
5
Ravi Thapliyal

Ces attributs "xxxStart", "xxxEnd" doivent prendre en charge la disposition RTL (droite à gauche) dans certains paramètres régionaux.

Android:paddingStart
Android:paddingEnd
Android:layout_marginStart
Android:layout_marginEnd
...

Vous pouvez voir plus ici à ce sujet.

Dans la présentation normale (de gauche à droite), "xxxStart" signifie "xxxLeft" et "xxxEnd" signifie "xxxRight". Mais dans la présentation de droite à gauche, "xxxStart" signifie "xxxRight" et "xxxEnd" signifie "xxxLeft".

Mais RTL n’est supporté que sur sdk 17 et supérieur. 

Pour prendre en charge low sdk, vous pouvez utiliser "Android: layout_marginStart" avec "Android: layout_marginLeft". "Android: layout_marginLeft" sera utilisé sur les périphériques sdk inférieurs.

1
Carlos Parker