J'essaie d'utiliser une combinaison de RelativeLayout et LinearLayout pleine de TextViews et d'un bouton en bas. J'écris une séquence dans MainActivity qui change l'orientation de l'horizontale à la verticale et vice versa. Donc, fondamentalement, j'ai dû tourner les lignes en colonnes.
Voici le fichier xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="10dp" android:paddingRight="10dp" > <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="0dp" android:paddingTop="40dp" android:paddingRight="16dp" android:orientation="horizontal" android:gravity="top" tools:context=".MainActivity"> <TextView android:id="@+id/textv1" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="left" android:text="@string/text1" /> <TextView android:id="@+id/textv2" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text2"/> <TextView android:id="@+id/textv3" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text3"/> <TextView android:id="@+id/textv4" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text4"/> </LinearLayout> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="center" tools:context=".MainActivity"> <TextView android:id="@+id/textv5" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:text="@string/text5"/> <TextView android:id="@+id/textv6" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text6"/> <TextView android:id="@+id/textv7" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text7"/> <TextView android:id="@+id/textv8" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text8"/> </LinearLayout> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout3" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:gravity="bottom" android:foregroundGravity="right" tools:context=".MainActivity"> <TextView android:id="@+id/textv9" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="bottom" android:text="@string/text9"/> <TextView android:id="@+id/textv10" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text10" /> <TextView android:id="@+id/textv11" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text11"/> <TextView android:id="@+id/textv12" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text12"/> </LinearLayout> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" android:layout_alignParentBottom="true"/> </RelativeLayout>
Cela devrait ressembler à ceci:
Mais ça tourne comme ça:
Seule la ligne centrale reste au bon endroit, les autres s'empilent les uns sur les autres.
4 Réponses :
À quoi ça ressemble? Marge linéaire
code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="10dp" android:paddingRight="10dp" android:layout_marginTop="40dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="602dp" android:orientation="vertical"> <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="147dp" android:gravity="top" android:orientation="horizontal" android:paddingLeft="0dp" android:paddingTop="40dp" android:paddingRight="16dp" tools:context=".MainActivity"> <TextView android:id="@+id/textv1" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="left" android:text="@string/text1" /> <TextView android:id="@+id/textv2" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text2" /> <TextView android:id="@+id/textv3" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text3" /> <TextView android:id="@+id/textv4" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text4" /> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout2" android:layout_width="393dp" android:layout_height="141dp" android:gravity="center" android:orientation="horizontal" tools:context=".MainActivity"> <TextView android:id="@+id/textv5" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" android:text="@string/text5" /> <TextView android:id="@+id/textv6" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text6" /> <TextView android:id="@+id/textv7" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text7" /> <TextView android:id="@+id/textv8" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text8" /> </LinearLayout> <LinearLayout android:id="@+id/LinearLayout3" android:layout_width="397dp" android:layout_height="104dp" android:foregroundGravity="right" android:gravity="bottom" android:orientation="horizontal" tools:context=".MainActivity"> <TextView android:id="@+id/textv9" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="bottom" android:text="@string/text9" /> <TextView android:id="@+id/textv10" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text10" /> <TextView android:id="@+id/textv11" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text11" /> <TextView android:id="@+id/textv12" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text12" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" android:layout_alignParentBottom="true"/>
Pas exactement, lorsque j'appuie sur le bouton, le changement en lignes verticales est juste un désordre.
Si vous souhaitez que les vues de texte soient régulièrement espacées dans une ligne, je vous suggère d'utiliser layout_weight dans chaque LinearLayout et d'organiser les LinearLayouts contenant les vues de texte les unes par rapport aux autres. Mais je suggère vraiment de changer votre approche. Vous définissez la largeur et la hauteur des vues de texte sur 100dp, mais Android a de nombreuses tailles d'écran afin qu'elles ne s'adaptent pas toujours exactement sur de nombreux appareils, et il y a un impact sur les performances, en utilisant ces nombreuses vues dans plusieurs mises en page pour les appareils bas de gamme. Ma suggestion est d'utiliser un RecyclerView avec CardView contenant votre TextView, puis d'utiliser un GridLayout avec le recyclerview. Vous pouvez modifier la disposition du TextView en conséquence via recyclerview dans le bouton onClick for.
Remplacez android:layout_height="match_parent"
par android:layout_height="wrap_content"
dans LinearLayout
.
<LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout3" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="bottom" android:foregroundGravity="right" tools:context=".MainActivity">...
Faire cela en déplaçant simplement la troisième mise en page, rien de bon du tout.
Vous devez changer tous les LinearLayout
Je viens de le résoudre, regardez ma réponse ci-dessous.
J'arrive à résoudre le problème en tournant le fichier principal avec quelques lignes. Voici la ligne ajoutée:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingLeft="0dp" android:paddingRight="0dp" > <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="0dp" android:paddingTop="100dp" android:paddingRight="16dp" android:orientation="horizontal" android:gravity="top" tools:context=".MainActivity"> <TextView android:id="@+id/textv1" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text1" /> <TextView android:id="@+id/textv2" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text2" /> <TextView android:id="@+id/textv3" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text3" /> <TextView android:id="@+id/textv4" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text4" /> </LinearLayout> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingRight="10dp" android:gravity="center" tools:context=".MainActivity"> <TextView android:id="@+id/textv5" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text5" /> <TextView android:id="@+id/textv6" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text6" /> <TextView android:id="@+id/textv7" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text7" /> <TextView android:id="@+id/textv8" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text8" /> </LinearLayout> <LinearLayout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout3" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" android:paddingBottom="100dp" android:paddingTop="100dp" android:gravity="bottom" tools:context=".MainActivity"> <TextView android:id="@+id/textv9" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text9" /> <TextView android:id="@+id/textv10" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text10" /> <TextView android:id="@+id/textv11" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text11" /> <TextView android:id="@+id/textv12" android:layout_width="100dp" android:layout_height="100dp" android:text="@string/text12" /> </LinearLayout> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" android:layout_alignParentBottom="true"/> </RelativeLayout>
Et j'ai également apporté des modifications au fichier xml. Voici le code XML final:
if(myll3.getOrientation() == LinearLayout.HORIZONTAL) myll3.setGravity(Gravity.BOTTOM | Gravity.CENTER); else if(myll3.getOrientation() == LinearLayout.VERTICAL) myll3.setGravity(Gravity.RIGHT | Gravity.CENTER);
Merci pour votre soutien et vos réponses.
Vous aurez peut-être plus de chance avec un TableLayout: developer.android.com/reference/android/widget/TableLayout
Je dois juste utiliser: Linéaire et Relatif.
@Soni, Android propose une option permettant d'utiliser la configuration du téléphone pour sélectionner les ressources de l'application. Cela signifie que vous pouvez créer deux fichiers de mise en page avec le même nom dans différents répertoires de
layout
enlayout
, un pour l'orientation portrait et un pour l'orientation paysage. Cliquez ici pour en savoir plus sur la gestion des modifications de configuration. Je vous assure - ce sera le moyen le plus simple. Réponse SO liée à l'exemple de solution: stackoverflow.com/a/4858052/7210237@JeneaVranceanu, je le sais mais je n'ai pas besoin d'utiliser l'orientation de l'écran, changez simplement l'orientation de LinearLayout à l'intérieur du Relative