0
votes

Définir la gravité dans LinearLayout - Android

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:

comment devrait apparaître

Mais ça tourne comme ça:

horizontal

verticale

Seule la ligne centrale reste au bon endroit, les autres s'empilent les uns sur les autres.


4 commentaires

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 en layout , 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


4 Réponses :


0
votes

À 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"/>


1 commentaires

Pas exactement, lorsque j'appuie sur le bouton, le changement en lignes verticales est juste un désordre.



0
votes

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.


0 commentaires

0
votes

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">...


3 commentaires

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.



0
votes

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.

Voici la vue finale: - horizontal

verticale


0 commentaires