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
чи повинен я зберігати ім’я макет-земля чи будь-яке інше слово @marapet
Vamsi Pavan Mahesh

9
Ви не можете використовувати жодне інше слово
Foo

Моє фонове зображення розтягується на ландшафті. У мене є макет-земля та малювальна земля .. доки вона розтягується. Я спробував використовувати те саме зображення, 9-патч-зображення, mdpi, hdpi n all .. все-таки проблема зберігається :(
Прабс

про що означає словоportrait
dsdsdsdsd

@dsdsdsdsd за версією студії Android це макет-порт
Gregzenegair

76

У поточній версії Android Studio (v1.0.2) ви можете просто додати ландшафтний макет, натиснувши кнопку у візуальному редакторі, показаному на скріншоті нижче. Виберіть "Створити варіацію пейзажу"

Android Studio додає ландшафтний макет


За винятком того, що він поміщає нову копію у вашу layout-landпапку. Будь-яка ідея, як викликати макет звідти? Неможливо використовувати R.layout.layout_name. Я намагаюся налаштувати власні макети вручну після зміни конфігурації, дякую.
Azurespot

2
@NoniA. Він повинен виявити, коли телефон переходить на ландшафт і автоматично дзвонить з місця розташування.
Distwo

43

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

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

Джерело


як щодо "портрета"?
dsdsdsdsd

Що з новими <sw> кваліфікаторами?
Ruchir Baronia

6

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

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

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

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


2

Ви можете згрупувати свій конкретний макет за правильною структурою папки наступним чином.

layout-land-target_version

тобто

макет-земля-19 // цільовий KitKat

так само ви можете створювати свої макети.

Сподіваюся, що це вам допоможе


Дякую за відповідь, але я не бачу, як допомагає ваша відповідь, оскільки на це питання вже відповіли. Може, ви могли б пояснити користь -19суфікса? Чи корисно це будь-яким чином?
Брайан Філд

0

Спробую пояснити це найближчим часом.

По-перше, ви можете помітити, що тепер вам слід використовувати ConstraintLayout, як цього вимагає google (див. Бібліотеку androix).

У проекті для андроїд-студії ви можете надати макетів, орієнтованих на екран, створюючи додаткові 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

Ви також можете використовувати класифікатор з файлами res ressources, використовуючи dimens.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 / values ​​/ dimens.xml

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

res / values-land / 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.