Android: альтернативный макет xml для ландшафтного режима


126

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

Ответы:


217

По умолчанию макеты /res/layoutприменяются как в портретной, так и в альбомной ориентации.

Если у вас, например,

/res/layout/main.xml

вы можете добавить новую папку /res/layout-land, скопировать main.xmlв нее и внести необходимые изменения.

ориентация

См. Также http://www.androidpeople.com/android-portrait-amp-landscape-differeent-layouts и http://www.devx.com/wireless/Article/40792/1954 для получения дополнительных сведений.


1
должен ли я сохранить название layout-land или любое другое слово @marapet
Pavan Mahesh

9
Вы не можете использовать другое слово
Foo

Мое фоновое изображение растягивается на ландшафте. У меня есть layout-land и drawable-land .. все же оно растягивается .. Я пробовал использовать то же изображение, изображения с 9 патчами, mdpi, hdpi n все .. проблема все еще сохраняется :(
Prabs

каково словоportrait
dsdsdsdsd

@dsdsdsdsd, согласно Android-студии, это макет-порт
Gregzenegair

76

В текущей версии Android Studio (v1.0.2) вы можете просто добавить альбомный макет, нажав кнопку в визуальном редакторе, показанном на скриншоте ниже. Выберите «Создать вариант ландшафта».

Android Studio добавить ландшафтный макет


За исключением того, что он помещает новую копию в вашу layout-landпапку. Есть идеи, как оттуда вызвать макет? Не могу использовать R.layout.layout_name. Я пытаюсь настроить свои собственные макеты вручную при изменении конфигурации, спасибо.
Azurespot 01

2
@NoniA. Он должен определять, когда телефон переключается в альбомную ориентацию, и автоматически вызывать его из макета.
Distwo,

43

Макеты в / res / layout применяются как к книжной, так и к альбомной ориентации, если вы не укажете иное. Предположим, у нас есть /res/layout/home.xml для нашей домашней страницы, и мы хотим, чтобы она выглядела по-разному в двух типах макета.

  1. создайте папку / res / layout-land (здесь вы сохраните свои макеты с учетом ландшафта)
  2. скопируйте туда home.xml
  3. внести в него необходимые изменения

Источник


а как насчет портрета?
dsdsdsdsd

А как насчет новых квалификаторов <sw>?
Ручир Барония

6

Самый быстрый способ для Android Studio 3.xx и Android Studio 4.xx

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

2. Вверху вы должны нажать на кнопку ориентации для предварительного просмотра , есть возможность создать альбомный макет (проверьте изображение), новая папка будет создана как ваш файл макета xml для этой конкретной ориентации.

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


2

Вы можете сгруппировать свой конкретный макет в правильной структуре папок следующим образом.

Макет-земля-target_version

т.е.

layout-land-19 // мишень KitKat

аналогично вы можете создавать свои макеты.

Надеюсь, что это поможет вам


Спасибо за ответ, но я не понимаю, как ваш ответ помогает, потому что на этот вопрос уже был дан ответ. Может быть, вы могли бы объяснить преимущества -19суффикса? Это хоть как-то полезно?
Брайан Филд

0

Я постараюсь объяснить это в ближайшее время.

Во-первых, вы можете заметить, что теперь вы должны использовать ConstraintLayout по запросу Google (см. Библиотеку androix).

В вашем проекте студии Android вы можете предоставить макеты для конкретного экрана, создав дополнительные каталоги res / layout /. По одному для каждой конфигурации экрана, требующей разного макета.

Это означает, что вы должны использовать квалификатор каталога в обоих случаях:

  • Поддержка устройств Android
  • Android альбомный или портретный режим

В итоге вот пример:

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

Вы также можете использовать квалификатор с файлами ресурсов, используя sizes.xml.

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets

RES / значения / dimens.xml

<resources>
    <dimen name="grid_view_item_height">70dp</dimen>
</resources>

RES / значения-земля / dimens.xml

<resources>
    <dimen name="grid_view_item_height">150dp</dimen>
</resources>

your_item_grid_or_list_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content

    <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="@dimen/grid_view_item_height"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/border"
            android:src="@drawable/ic_menu_slideshow">

</androidx.constraintlayout.widget.ConstraintLayout>

Источник: https://developer.android.com/training/multiscreen/screensizes

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.