Поделиться через


Альтернативные представления макета

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

Создание альтернативных макетов

Щелкнув значок "Альтернативное представление макета" (слева от устройства), откроется панель предварительного просмотра, чтобы получить список альтернативных макетов, доступных в проекте. Если нет альтернативных макетов, представление по умолчанию будет представлено:

Alternate layout view pane

Щелкнув зеленый знак плюс рядом с новой версией, откроется диалоговое окно "Создать вариант макета", чтобы выбрать квалификаторы ресурсов для этого варианта макета:

Create layout variation

В следующем примере квалификатор ресурсов для ориентации экрана имеет значение "Альбомная" и размер экрана изменяется на "Большой". При этом создается новая версия макета с именем large-land:

Large-land variation

Обратите внимание, что в области предварительного просмотра слева отображаются эффекты выбора квалификатора ресурсов. Нажатие кнопки "Добавить" создает альтернативный макет и переключает конструктор на этот макет. Область предварительного просмотра альтернативного макета указывает, какой макет загружается в конструктор с помощью небольшого правого указателя, как показано на следующем снимке экрана:

Loaded layout indicator

Редактирование альтернативных макетов

При создании альтернативных макетов часто рекомендуется внести одно изменение, которое применяется ко всем вилочным версиям макета. Например, может потребоваться изменить текст кнопки на желтый во всех макетах. Если у вас есть большое количество макетов, и вам нужно распространить одно изменение на все версии, обслуживание может быстро стать громоздким и подверженным ошибкам.

Чтобы упростить обслуживание нескольких версий макетов, конструктор предоставляет режим многоредактирования , который распространяет изменения по одному или нескольким макетам. При наличии нескольких макетов отображается значок с несколькими изменениями :

Multi-edit icon

При нажатии значка "Многоредактировать " отображаются строки, указывающие, что макеты связаны (как показано ниже); то есть при внесении изменений в один макет, это изменение распространяется на любые связанные макеты. Вы можете отменить связь со всеми макетами, щелкнув значок с кругом, указанный на следующем снимке экрана:

Unlink all layouts

Если у вас более двух макетов, можно выборочно переключить кнопку редактирования слева от каждого предварительного просмотра макета, чтобы определить, какие макеты связаны друг с другом. Например, если вы хотите внести одно изменение, которое распространяется на первый и последний из трех макетов, сначала вы отмените связь со средним макетом, как показано здесь:

Unlink middle layout

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

Пример многоредактного редактирования

Как правило, при внесении изменений в один макет это же изменение распространяется на все другие связанные макеты. Например, добавление нового TextView мини-приложения в макет по умолчанию и изменение текстовой строки Portrait приведет к тому, что одно и то же изменение будет выполнено для всех связанных макетов. Вот как он выглядит в макете по умолчанию :

Add TextView

Он TextView также добавляется в представление макета больших земель , так как он связан с макетом по умолчанию :

Landscape TextView

Но что делать, если вы хотите внести изменения, которые являются локальными только для одного макета (т. е. вы не хотите, чтобы изменение распространялось на любой другой макет)? Для этого необходимо отменить связь с макетом, который необходимо изменить, прежде чем изменять его, как описано далее.

Внесение локальных изменений

Предположим, что мы хотим, чтобы оба макета были TextViewдобавлены, но мы также хотим изменить текстовую строку в макете Landscape больших земель, а не Portrait. Если это изменение будет изменено на большой земле при связывании обоих макетов, изменение будет распространяться обратно в макет по умолчанию . Поэтому перед изменением необходимо сначала отменить связь с двумя макетами. При изменении текста в большом расположении конструктор помечает это изменение красным кадром, чтобы указать, что изменение является локальным для макета больших земель Landscapeи не распространяется обратно в макет по умолчанию:

Local change

Щелкнув макет по умолчанию для просмотра, TextView текстовая строка по-прежнему задана Portrait.

Обработка конфликтов

Если вы решили изменить цвет текста в макете по умолчанию на зеленый, появится значок предупреждения в связанном макете. Щелкнув этот макет, откроется макет, чтобы выявить конфликт. Мини-приложение, вызвавшее конфликт, выделено красным кадром и отображается следующее сообщение: последние изменения вызвали конфликты в этом альтернативном макете.

Conflicting change

Поле конфликта отображается справа от мини-приложения, чтобы объяснить конфликт:

Conflict warning

В поле конфликта отображается список измененных свойств и список их значений. При нажатии кнопки "Игнорировать конфликт " свойство применяется только к этому мини-приложению. Нажатие кнопки "Применить" применяет изменение свойства к этому мини-приложению, а также к другому мини-приложению в связанном макете по умолчанию . Если применяются все изменения свойств, конфликт автоматически отменяется карта.

Просмотр конфликтов групп

Изменения свойств не являются единственным источником конфликтов. Конфликты можно обнаружить при вставке или удалении мини-приложений. Например, если макет больших земель не связан с макетом по умолчанию, а TextView в макете больших земель перетаскивается над Buttonмакетом, конструктор помечает перемещенное мини-приложение, чтобы указать конфликт:

View group conflict

Однако на маркере Buttonнет. Несмотря на то, что позиция Button изменилась, Button в ней не отображаются примененные изменения, относящиеся к конфигурации больших земель .

Если добавляется CheckBox в макет по умолчанию , создается другой конфликт, а значок предупреждения отображается по макету больших земель :

Checkbox conflict

Щелкнув макет большой земли , откроется конфликт. Отображается следующее сообщение: последние изменения вызвали конфликты в этом альтернативном макете:

Alt layout conflict

Кроме того, в поле конфликта отображается следующее сообщение:

Conflict message

CheckBox Добавление причин конфликта, так как макет больших земель имеет изменения в LinearLayout том, что он содержит. Однако в этом случае поле конфликта отображает мини-приложение, которое было только что вставлено в макет по умолчанию (the CheckBox).

Если щелкнуть "Игнорировать конфликт", конструктор разрешает конфликт, что позволяет мини-приложению, отображаемого в поле конфликта, перетаскиваться в макет, в котором отсутствует мини-приложение (в данном случае макет большого участка ):

Resolved group conflict

Как показано в предыдущем примере с Buttonприложением, не имеет красного маркера изменения, CheckBox так как LinearLayout только изменения, примененные в макете больших земель .

Сохраняемость конфликтов

Конфликты сохраняются в файле макета в виде XML-комментариев, как показано ниже:

<!-- Widget Inserted Conflict | id:__root__ | @+id/checkBox1 -->

Поэтому при закрытии и повторном открытии проекта все конфликты по-прежнему будут там , даже те, которые были проигнорированы.