Ответ 1
Создайте каталог layout-land
и поместите ландшафтную версию XML файла вашего макета в этот каталог.
Я видел ссылки на возможность указать два отдельных XML файла макета для активности, один для Portrait и один для Landscape. Я не должен был найти какую-либо информацию о том, как это сделать. Как я могу указать для каждого вида деятельности, какой xml файл представляет собой портретный макет и который является ландшафтным макетом?
Можно ли также указать разные макеты для разных размеров экрана? Если да, то как это делается?
Создайте каталог layout-land
и поместите ландшафтную версию XML файла вашего макета в этот каталог.
Вам просто нужно поместить его в отдельные папки с разными именами в зависимости от ориентации и разрешения, устройство автоматически выберет правильный для своих настроек экрана
Подробнее здесь:
http://developer.android.com/guide/practices/screens_support.html
в разделе "Сортировщики каталога ресурсов для размера и плотности экрана"
Для любителей мыши! Я говорю правой кнопкой мыши на папке ресурсов и Add new resource file
, и из доступных квалификаторов выберите orientation
:
Но все же вы можете сделать это вручную, скажем, добавив подпапку "layout-land" в
"Your-Project-Directory\приложение\SRC\главная\Рез"
с тех пор любой файл layout.xml в этой подпапке будет автоматически работать только в ландшафтном режиме.
Используйте "layout-port" для портретного режима.
Просто напоминание:
Удалите атрибут orientation
из android:configChanges
для активности в вашем манифесте xml
, если вы его определили:
android:configChanges="orientation|screenLayout|screenSize"
Создайте новый каталог layout-land
, затем создайте файл xml
с тем же именем в layout-land
, как это было в каталоге layout
, и выровняйте его содержимое для ландшафтного режима.
Обратите внимание, что идентификатор содержимого в обоих xml
одинаковый.
Или используйте это:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:scrollbars="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!-- Add your UI elements inside the inner most linear layout -->
</LinearLayout>
</ScrollView>
Я думаю, что самый простой способ в последних версиях Android - перейти в режим "Дизайн" XML (а не текста).
Затем из меню выберите опцию - Создать альбомную вариацию. Это создаст пейзаж XML без каких-либо хлопот в течение нескольких секунд. Последняя версия Android Studio позволяет сразу создавать ландшафтный вид.
Я надеюсь, что это работает для вас.
В последней строке ниже приведен пример применения двух квантификаторов: экран с горизонтальной и наименьшей шириной (600 дп). Обновите 600dp с теми, которые вам нужны.
res/layout/main_activity.xml # For handsets
res/layout-land/main_activity.xml # For handsets in landscape
res/layout-sw600dp/main_activity.xml # For 7" tablets
res/layout-sw600dp-land/main_activity.xml # For 7" tablets in landscape
Вышесказанное относится и к размерам
res/values/dimens.xml # For handsets
res/values-land/dimens.xml # For handsets in landscape
res/values-sw600dp/dimens.xml # For 7" tablets
res/values-sw600dp-land/dimens.xml # For 7" tablets in landscape
Полезные метрики устройства: https://material.io/tools/devices/
Используя Android Studio 3.4.1, он больше не создает папку layout-land
.Это создаст папку и объединит два файла макета.
Самый быстрый способ для Android Studio 3.xx
1. Перейдите на вкладку "Дизайн" макета упражнения.
2.Вверху вы должны нажать на кнопку ориентации для предварительного просмотра, есть опция для создания макета ландшафта (проверьте изображение), новая папка будет создана как файл макета XML для этой конкретной ориентации.