Установите вид справа в ландшафтном режиме в LinearLayout - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть пользовательский вид внизу, содержащий значки в портретном режиме.Я хочу этот вид на правой стороне экрана в ландшафтном режиме.Я пытался установить свойства во время выполнения, но это не работает.Я уверен, что либо я что-то упускаю, либо делаю что-то не так.

Ниже приведен мой XML:

 <?xml version="1.0" encoding="utf-8"?>
    <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:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".ui.HomeActivity">

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:text="@string/title_mirror"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent">
        </FrameLayout>



         <LinearLayout
            android:id="@+id/navigation_view"
            android:layout_width="match_parent"
        android:layout_height="56dp"
            android:layout_alignParentBottom="true"
            android:background="?android:attr/windowBackground"
            android:orientation="horizontal"
            android:weightSum="1">

                <ImageView
                    android:id="@+id/image_mirror"
                    android:layout_width="@dimen/_20sdp"
                    android:layout_height="@dimen/_20sdp"
                    android:layout_gravity="center"
                    android:layout_marginTop="8dp"
                    android:layout_marginBottom="8dp"
                    android:layout_weight="0.33"
                    app:srcCompat="@drawable/ic_mirror_not_selected" />

                <ImageView
                    android:id="@+id/image_review"
                    android:layout_width="@dimen/_20sdp"
                    android:layout_height="@dimen/_20sdp"
                    android:layout_gravity="center"
                    android:layout_marginTop="8dp"
                    android:layout_marginBottom="8dp"
                    android:layout_weight="0.33"
                    app:srcCompat="@drawable/ic_review_not_selected" />

                <ImageView
                    android:id="@+id/img_profile"
                    android:layout_width="@dimen/_20sdp"
                    android:layout_height="@dimen/_20sdp"
                    android:layout_gravity="center"
                    android:layout_marginTop="8dp"
                    android:layout_marginBottom="8dp"
                    android:layout_weight="0.33"
                    app:srcCompat="@drawable/ic_profile_not_selected" />

            </LinearLayout>

        </RelativeLayout>

В приведенном выше XML LinearLayout с идентификатором navigation_view - это мое пользовательское представление.Я хочу, чтобы этот вид находился с правой стороны экрана в ландшафтном режиме.Я попытался установить следующие свойства во время выполнения, но это удерживает мой взгляд сверху вместо правильного.

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

        ViewGroup.LayoutParams params1 = view_nav.getLayoutParams();

        params1.height = ViewGroup.LayoutParams.MATCH_PARENT;
        params1.width = 100;
        params.addRule(RelativeLayout.ALIGN_PARENT_END);

        LinearLayout layout = new LinearLayout(this);

        layout.setOrientation(LinearLayout.VERTICAL);
        view_nav.setLayoutParams(params);

        img_mirror.startAnimation(toLandAnim);
        img_review.startAnimation(toLandAnim);
        img_profile.startAnimation(toLandAnim);


        //  constraintSet.connect(view_nav.getId(), ConstraintSet.LEFT, R.id.fragment_container, ConstraintSet.LEFT, 0);
        //  constraintSet.applyTo(constraintLayout);
    } else {
        // In portrait

        img_mirror.startAnimation(toPortAnim);
        img_review.startAnimation(toPortAnim);
        img_profile.startAnimation(toPortAnim);
    }
}

Я не уверен, как мне установить свойство LinearLayout во время выполнения, чьим родителем является RelativeLayout.

1 Ответ

0 голосов
/ 19 декабря 2018

Создайте еще один XML-файл, содержащий ваш ландшафтный макет.Этот xml-файл должен иметь то же имя, что и портретный файл, и он должен находиться в res/layout-land (если макет портрета находится в папке res/layout).Android будет использовать правильную компоновку в зависимости от ориентации устройства, и вам придется обрабатывать только анимации на основе предоставленных вами примеров кода.

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {

    img_mirror.startAnimation(toLandAnim);
    img_review.startAnimation(toLandAnim);
    img_profile.startAnimation(toLandAnim);

} else {
    // In portrait

    img_mirror.startAnimation(toPortAnim);
    img_review.startAnimation(toPortAnim);
    img_profile.startAnimation(toPortAnim);
}

`

Для получения дополнительной информации: https://developer.android.com/training/multiscreen/screensizes

...