Як вказати різні схеми для портретних та пейзажних орієнтацій?


142

Я бачив посилання на те, що можна вказати два окремі файли xml-макета для діяльності, один для портретного та один для альбомного. Я не знаходив жодної інформації, як це зробити. Як я можу вказати для кожної діяльності, який XML-файл - це портретний макет, а який - ландшафтний макет?

Чи також можна вказати різні макети для різних розмірів екрана? Якщо так, як це робиться?

Відповіді:


203

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


3
Чи означає це, що для всіх видів діяльності потрібно визначати і пейзаж, і портрет, якщо я це роблю?
Джей Аскрен

20
Ні, якщо не існує визначення макета-ділянки, воно просто використовує макет XML у каталозі стандартного макета.
Марк Б

у моєму випадку, layout-land не працює, коли я використовую, android: configChanges = "орієнтація | клавіатураHidden | screenSize"
Tushar Pandey

9
Видалити орієнтацію з android: configChanges = "орієнтація | клавіатураHidden | screenSize"
Ushal Naidoo

60

Вам просто потрібно помістити його в окремі папки з різними назвами залежно від орієнтації та роздільної здатності, пристрій автоматично вибере потрібну для налаштувань екрана

Більше інформації тут:

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

у розділі "Кваліфікатори каталогу ресурсів для розміру та щільності екрана"


Працює лише для ОС версії 1.6 або новішої. Якщо ви хочете підтримати 1.5, вам потрібно це посилання: developer.android.com/guide/practices/screens-support-1.5.html
Скотт Біггс,

2
@Silvio Donnini - посилання більше не мають необхідної інформації.
itsaboutcode

2
@itsaboutcode Так, це так: Перейдіть до
розділу

26

Для любителів миші! Я кажу, клацніть правою кнопкою миші на папці ресурсів Add new resource file, і з Доступних класифікаторів виберіть orientation:

введіть тут опис зображення


Але все-таки ви можете зробити це вручну, сказавши, додавши в папку "layout-land" підпапки

"Ваш-каталог проектів \ app \ src \ main \ res"

з цього часу будь-який файл layout.xml в цій підпапці буде працювати автоматично лише в альбомному режимі .

Використовуйте "порт-макет" для портретного режиму.


1
Це працювало для мене. Я додав новий файл макета згідно інструкції з такою ж назвою, як і портретна версія. Android Studio автоматично створив папку для цього макета. Один макет для портрета та інший для пейзажу. Новий макет автоматично відображається при обертанні екрана.
Smitty-Werben-Jager-Manjenson

23

Просто нагадування:

Видаліть orientationз android:configChangesатрибута активність у вашому xmlфайлі маніфесту, якщо ви його визначили:

android:configChanges="orientation|screenLayout|screenSize"

1
Що робити, якщо мені потрібно мати Android: configChanges = "орієнтація | screenLayout | screenSize" в моєму маніфесті, оскільки деякі мої фрагменти можуть бути як орієнтованими, а деякі ні, але все ж потрібні окремі макети для пейзажу та портрету для тих фрагментів, які може динамічно змінювати орієнтацію?
natansalda

9

Найшвидший спосіб для Android Studio 3.xx та Android Studio 4.xx

1.Перейти до вкладки дизайну макета діяльності

2.Угорі слід натиснути на орієнтацію для кнопки попереднього перегляду, є можливість створити альбомний макет (перевірити зображення), нова папка буде створена як ваш файл макета xml для цієї конкретної орієнтації

введіть тут опис зображення


4

Я думаю, що найпростіший спосіб в останніх версіях Android - це перейти в режим дизайну XML (не тексту).

Потім у меню виберіть варіант - Створити варіацію пейзажу. Це створить пейзаж xml без зайвих клопотів за кілька секунд. Остання версія Android Studio дозволяє відразу створити пейзажний вид.

введіть тут опис зображення

Я сподіваюся, що це працює для вас.


3

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

Зауважте, що ідентифікатор вмісту в обох xmlоднаковий.


3

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


2

Або скористайтеся цим:

<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>

0
  1. Клацніть правою кнопкою миші res res,
  2. Новий -> Файл ресурсів Android
  3. у Доступних класифікаторах виберіть Орієнтація,
  4. додати до вибраного кваліфікатора
  5. у орієнтації на екран виберіть Пейзаж
  6. Натисніть OK

Використовуючи Android Studio 3.4.1, він більше не створює layout-landпапки . Він створить папку і зведе два файли макета разом.

введіть тут опис зображення


2
Неправильно. Ви не використовуєте режим перегляду папок (наприклад, "Проект"). Напевно, ви використовуєте режим перегляду "Android", який об'єднує файли разом, як на екрані екрана, у віртуальних папках, але фактична структура папок все ще описується як тут.
пн__
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.