2 votes

Comment utiliser layoutDirection pour refléter dynamiquement l'ensemble de la mise en page dans Android ?

J'essaie de construire une vue frontale d'une application Android. Je dois dynamiquement pousser l'ensemble de l'affichage vers la droite de l'écran.

Je veux pousser l'ensemble de la disposition relative vers la droite de mon écran.

Voici mon code XML :

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/message_single_layout"
        android:padding="10dp"
        android:layout_gravity=""
        android:weightSum="10">
        <de.hdodenhof.circleimageview.CircleImageView
            android:id="@+id/message_profile_layout"
            android:layout_width="36dp"
            android:layout_height="36dp"
            android:layout_weight="0"
            android:src="@drawable/default_avatar" />

        <TextView
            android:layout_alignParentRight="true"
            android:id="@+id/message_text_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/name_text_layout"
            android:layout_marginLeft="10dp"
            android:layout_toEndOf="@+id/message_profile_layout"
            android:padding="10dp"
            android:background="@drawable/their_message"
            android:text="Message Text"
            android:textColor="@color/colorPrimary"
            android:textSize="14sp" />

        <TextView
            android:id="@+id/name_text_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:layout_toEndOf="@+id/message_profile_layout"
            android:text="Display Name"
            android:textColor="@android:color/black"
            android:textSize="15sp"
            android:textStyle="bold"

            />

        <TextView
            android:id="@+id/time_text_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/message_text_layout"
            android:layout_marginStart="-15dp"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="4dp"
            android:layout_toEndOf="@+id/name_text_layout"
            android:text="00:00"
            android:textSize="12sp" />

        <ImageView
            android:id="@+id/message_image_layout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/message_text_layout"
            android:layout_alignStart="@+id/message_text_layout"
            android:layout_alignParentEnd="true"
            android:layout_marginStart="0dp"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="-6dp"
            android:layout_marginEnd="9dp"
            android:layout_toEndOf="@+id/message_profile_layout"
            android:padding="0dp"
            android:scaleType="centerCrop" />

    </RelativeLayout>

Je veux le faire de manière dynamique. J'ai essayé de changer gravity a right , layout_gravity a right . SetGravity() fonction. Rien ne résout mon problème. Merci de m'aider. Je vous remercie.

2voto

Alireza Bideli Points 733

Déclarer un RelativeLayout dans votre activité ou fragment en tant que champ

private RelativeLayout mRoot;

Initialiser la variable objet "Root layout" comme suit :

En activité :

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.yourLayout);

         mRoot= findViewById(R.id.message_single_layout);
    }

dans Fragment :

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mRoot= (RelativeLayout) view;
}

Et où vous voulez mettre votre racine Direction de la mise en page à rtl (si votre SKD minimum est d'au moins 17). rtl signifie de droite à gauche.

    mRoot.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

J'espère que cela vous aidera !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X