Масштабируйте все элевемы макета в соответствии с ландшафтным режимом


У меня есть план действий, определенный следующим образом:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:padding="0dp"
    android:gravity="center">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="@string/tv_example"
                android:textSize="45sp"
                android:textStyle="bold"
                android:textAlignment="center"
                android:maxLines="2"
                android:ellipsize="end"
                android:padding="5dp"
                android:background="@color/transparent">
            </TextView>

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:inputType="number"
                android:text="@string/tv_example"
                android:textSize="40sp"
                android:textStyle="bold|italic"
                android:textAlignment="center"
                android:maxLines="1"
                android:ellipsize="end"
                android:padding="5dp"
                android:background="@color/transparent">
            </EditText>
        </LinearLayout>

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            android:maxHeight="150dp"
            android:maxWidth="150dp"
            android:src="@mipmap/ic_launcher"
            android:padding="15dp"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"/>

        <Button
            android:id="@+id/button_item_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            android:alpha="0.3"
            android:clickable="false"
            android:ellipsize="end"
            android:padding="15dp"
            android:layout_margin="50dp"
            android:text="@string/button_edit"
            android:textAlignment="center"
            android:textSize="25sp"/>
    </LinearLayout>
</RelativeLayout>

Который производит следующее в портретном режиме:

[портретный режим[1]

Но при переключении в ландшафтный режим кнопка исчезает:

альбомный режим

Как я могу сделать отсутствующий TextView видимым в ландшафтном режиме, Или еще лучше-масштабировать все предметы в соответствии с новой ориентацией?

В основном, текстовые представления являются важными представлениями - я хочу, чтобы они были видны, даже ценой сокращения Button иили ImageView

Я попытался удалить строку android:layout_weight="1" из самой внутренней LinearLayout, содержащей TextView -

Это делает текст apear в ландшафтном режиме, но делает Button disappear:

(это также делает весь макет выровненным по верху, а не по центру экрана в портретном режиме)

никакого веса пейзаж

Спасибо

2 2

2 ответа:

Наилучшей практикой в такой ситуации является наличие2 файлов компоновки , по одному для каждой ориентации.

Создайте новую папку в каталоге /res и назовите ее layout-land В Android Studio, а также поместите XML-файлы макета для ландшафта с тем же именем.

При изменении ориентации ОС Android будет использовать xml-файл из этой папки вместо того, чтобы пытаться настроить исходный. Это рекомендуемый подход для поддержки ориентации.

В вашем xml вы упомянули android:layout_margin="50dp" для вашей кнопки , которая влияет на ваш макет рендеринга, чтобы подтолкнуть элементы вверх. Это приводит к скрытию textview. Попробуйте изменить макет с меньшим количеством полей или использовать заполнение в качестве альтернативы. Это может быть полезно, чтобы сохранить все элементы в визуализации.