Как использовать layoutDirection для динамического зеркалирования всего макета в Android? - PullRequest
4 голосов
/ 04 октября 2019

Я пытаюсь создать внешний вид приложения для Android. Я должен динамически сдвинуть весь экран вправо от экрана.

Я хочу нажать весь относительный макет справа от моего экрана.

Ниже приведен мой 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>

Я хочу сделать это динамически. Я попытался изменить gravity на right, layout_gravity на right. SetGravity() функция. Ничто не решает мою проблему. Пожалуйста, помогите мне. Спасибо.

1 Ответ

5 голосов
/ 05 октября 2019

Объявите объект RelativeLayout в вашей деятельности или фрагмент как поле

private RelativeLayout mRoot;

Инициализируйте переменную корневого объекта макета, как показано ниже:

В действии:

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

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

во фрагменте:

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

И где бы вы ни захотели установить для корневого Направление расположения значение rtl (есливаш минимальный SKD составляет не менее 17). RTL означает справа налево

    mRoot.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);

Надеюсь, это поможет вам !!

...