Как указать разные макеты для портретной и альбомной ориентации? - PullRequest
133 голосов
/ 23 января 2010

Я видел ссылки на возможность указать два отдельных XML-файла макета для действия, один для Портрета и один для Пейзажа. Я не был, чтобы найти какую-либо информацию о том, как это сделать, хотя. Как указать для каждого действия, какой XML-файл является его портретным макетом, а какой альбомным?

Можно ли указать разные макеты для экрана разных размеров? Если да, то как это сделать?

Ответы [ 9 ]

194 голосов
/ 23 января 2010

Создайте каталог layout-land и поместите альбомную версию XML-файла макета в этот каталог.

59 голосов
/ 23 января 2010

Вам просто нужно поместить его в отдельные папки с разными именами в зависимости от ориентации и разрешения, устройство автоматически выберет нужную для своих настроек экрана

Подробнее здесь:

http://developer.android.com/guide/practices/screens_support.html

в разделе "Спецификаторы каталога ресурсов для размера и плотности экрана"

22 голосов
/ 17 сентября 2016

Для любителей мыши! Я говорю правой кнопкой мыши на папке ресурсов и Add new resource file, и из доступных квалификаторов выберите orientation:

enter image description here


Но все же вы можете сделать это вручную, скажем, добавив подпапку "layout-land" в

"Your-Project-Direction \ app \ src \ main \ res"

с тех пор любой файл layout.xml в этой подпапке будет работать только в альбомном режиме автоматически .

Используйте «layout-port» для портретного режима.

19 голосов
/ 30 октября 2013

Просто напоминание:

Удалите атрибут orientation из android:configChanges для действия в файле манифеста xml, если он определен вами:

android:configChanges="orientation|screenLayout|screenSize"
3 голосов
/ 23 апреля 2016

Создайте новый каталог layout-land, затем создайте файл xml с тем же именем в layout-land, как это было в каталоге layout и выровняйте по нему свой контент для альбомного режима.

Обратите внимание, что идентификатор содержимого в обоих xml одинаков.

2 голосов
/ 15 апреля 2013

Или используйте это:

<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>
1 голос
/ 26 февраля 2019

В последней строке ниже приведен пример применения двух квантификаторов: пейзаж и наименьшая ширина (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/

1 голос
/ 25 февраля 2019

Я думаю, что самый простой способ в последних версиях Android - перейти в режим «Дизайн» XML (не текста).

Затем из меню выберите опцию - Создать альбомную вариацию. Это создаст пейзаж XML без каких-либо хлопот в течение нескольких секунд. Последняя версия Android Studio позволяет сразу создавать альбомную ориентацию.

enter image description here

Я надеюсь, что это работает для вас.

0 голосов
/ 09 июня 2019
  1. Щелкните правой кнопкой мыши по папке res,
  2. Новое -> Файл ресурсов Android
  3. в Доступных квалификаторах, выберите Ориентация,
  4. добавить в выбранный классификатор
  5. в разделе «Ориентация экрана» выберите «Пейзаж»
  6. Нажмите ОК

При использовании Android Studio 3.4.1, он больше не создает layout-land папку . Он создаст папку и объединит два файла макета.

enter image description here

...