Как мне указать разные макеты для портретных и ландшафтных ориентаций?
-
22-09-2019 - |
Вопрос
Я видел ссылки на возможность указать два отдельных файла XML для деятельности, один для портрета и один для ландшафта. Я не был, чтобы найти никакой информации о том, как это сделать, хотя. Как мне указать для каждого действия, какое XML -файл он является портретным макетом и какой макет ландшафта?
Можно ли также указать разные макеты для разных размеров экрана? Если так, как это делается?
Решение
Создать layout-land
каталог и поместите ландшафтную версию вашего макета XML -файла в этот каталог.
Другие советы
Вам просто нужно поместить его в отдельные папки с разными именами в зависимости от ориентации и разрешения, устройство автоматически выберет правильный для настройки экрана
Подробнее здесь:
http://developer.android.com/guide/practices/screens_support.html
В разделе «Квалификаторы каталога ресурсов для размера и плотности экрана»
Для любителей мышей! Я говорю правой кнопкой мыши на папку ресурсов и Add new resource file
, и из доступных квалификаторов выберите orientation
:
Но все же вы можете сделать это вручную, добавив подразделение «макета» в
"Your-Project-Directory app src main res"
С тех пор любой файл Mayout.xml в этом подразделе будет работать только в режиме ландшафта автоматически.
Используйте «Mayout-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 позволяет сразу создавать пейзаж.
Я надеюсь, что это сработает для вас.
Последняя строка ниже - пример для применения двух квантификаторов: пейзаж и самая маленькая ширина(600DP) экран. Обновите 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
- В доступных квалификаторах выберите ориентацию,
- Добавьте к выбранному квалификатору
- В ориентации на экране выберите ландшафт
- Нажмите ОК
Использование Android Studio 3.4.1, это больше не создает layout-land
папка. Анкет Он создаст папку и составит два файла макета вместе.
Самый быстрый способ для Android Studio 3.xx
1. Пройдите вкладку проектирования макета деятельности
2. В верхней части вы должны нажать на кнопку «Ориентация для предварительного просмотра», есть возможность создать макет ландшафта (проверка изображения), будет создана новая папка в качестве файла макета XML для этой конкретной ориентации