Альтернативные представления макета
В этом разделе объясняется, как можно использовать макеты версий с помощью квалификаторов ресурсов. Например, создайте версию макета, которая используется только в альбомном режиме и версии макета только для книжного режима.
Создание альтернативных макетов
Щелкнув значок "Альтернативное представление макета" (слева от устройства), откроется панель предварительного просмотра, чтобы получить список альтернативных макетов, доступных в проекте. Если нет альтернативных макетов, представление по умолчанию будет представлено:
Щелкнув зеленый знак плюс рядом с новой версией, откроется диалоговое окно "Создать вариант макета", чтобы выбрать квалификаторы ресурсов для этого варианта макета:
В следующем примере квалификатор ресурсов для ориентации экрана имеет значение "Альбомная" и размер экрана изменяется на "Большой". При этом создается новая версия макета с именем large-land:
Обратите внимание, что в области предварительного просмотра слева отображаются эффекты выбора квалификатора ресурсов. Нажатие кнопки "Добавить" создает альтернативный макет и переключает конструктор на этот макет. Область предварительного просмотра альтернативного макета указывает, какой макет загружается в конструктор с помощью небольшого правого указателя, как показано на следующем снимке экрана:
Редактирование альтернативных макетов
При создании альтернативных макетов часто рекомендуется внести одно изменение, которое применяется ко всем вилочным версиям макета. Например, может потребоваться изменить текст кнопки на желтый во всех макетах. Если у вас есть большое количество макетов, и вам нужно распространить одно изменение на все версии, обслуживание может быстро стать громоздким и подверженным ошибкам.
Чтобы упростить обслуживание нескольких версий макетов, конструктор предоставляет режим многоредактирования , который распространяет изменения по одному или нескольким макетам. При наличии нескольких макетов отображается значок с несколькими изменениями :
При нажатии значка "Многоредактировать " отображаются строки, указывающие, что макеты связаны (как показано ниже); то есть при внесении изменений в один макет, это изменение распространяется на любые связанные макеты. Вы можете отменить связь со всеми макетами, щелкнув значок с кругом, указанный на следующем снимке экрана:
Если у вас более двух макетов, можно выборочно переключить кнопку редактирования слева от каждого предварительного просмотра макета, чтобы определить, какие макеты связаны друг с другом. Например, если вы хотите внести одно изменение, которое распространяется на первый и последний из трех макетов, сначала вы отмените связь со средним макетом, как показано здесь:
В этом примере изменение макета по умолчанию или длинному макету будет распространяться на другой макет, но не на макет больших земель .
Пример многоредактного редактирования
Как правило, при внесении изменений в один макет это же изменение распространяется на все другие связанные макеты. Например, добавление нового TextView
мини-приложения в макет по умолчанию и изменение текстовой строки Portrait
приведет к тому, что одно и то же изменение будет выполнено для всех связанных макетов. Вот как он выглядит в макете по умолчанию :
Он TextView
также добавляется в представление макета больших земель , так как он связан с макетом по умолчанию :
Но что делать, если вы хотите внести изменения, которые являются локальными только для одного макета (т. е. вы не хотите, чтобы изменение распространялось на любой другой макет)? Для этого необходимо отменить связь с макетом, который необходимо изменить, прежде чем изменять его, как описано далее.
Внесение локальных изменений
Предположим, что мы хотим, чтобы оба макета были TextView
добавлены, но мы также хотим изменить текстовую строку в макете Landscape
больших земель, а не Portrait
. Если это изменение будет изменено на большой земле при связывании обоих макетов, изменение будет распространяться обратно в макет по умолчанию . Поэтому перед изменением необходимо сначала отменить связь с двумя макетами. При изменении текста в большом расположении конструктор помечает это изменение красным кадром, чтобы указать, что изменение является локальным для макета больших земель Landscape
и не распространяется обратно в макет по умолчанию:
Щелкнув макет по умолчанию для просмотра, TextView
текстовая строка по-прежнему задана Portrait
.
Обработка конфликтов
Если вы решили изменить цвет текста в макете по умолчанию на зеленый, появится значок предупреждения в связанном макете. Щелкнув этот макет, откроется макет, чтобы выявить конфликт. Мини-приложение, вызвавшее конфликт, выделено красным кадром и отображается следующее сообщение: последние изменения вызвали конфликты в этом альтернативном макете.
Поле конфликта отображается справа от мини-приложения, чтобы объяснить конфликт:
В поле конфликта отображается список измененных свойств и список их значений. При нажатии кнопки "Игнорировать конфликт " свойство применяется только к этому мини-приложению. Нажатие кнопки "Применить" применяет изменение свойства к этому мини-приложению, а также к другому мини-приложению в связанном макете по умолчанию . Если применяются все изменения свойств, конфликт автоматически отменяется карта.
Просмотр конфликтов групп
Изменения свойств не являются единственным источником конфликтов. Конфликты можно обнаружить при вставке или удалении мини-приложений. Например, если макет больших земель не связан с макетом по умолчанию, а TextView
в макете больших земель перетаскивается над Button
макетом, конструктор помечает перемещенное мини-приложение, чтобы указать конфликт:
Однако на маркере Button
нет. Несмотря на то, что позиция Button
изменилась, Button
в ней не отображаются примененные изменения, относящиеся к конфигурации больших земель .
Если добавляется CheckBox
в макет по умолчанию , создается другой конфликт, а значок предупреждения отображается по макету больших земель :
Щелкнув макет большой земли , откроется конфликт. Отображается следующее сообщение: последние изменения вызвали конфликты в этом альтернативном макете:
Кроме того, в поле конфликта отображается следующее сообщение:
CheckBox
Добавление причин конфликта, так как макет больших земель имеет изменения в LinearLayout
том, что он содержит. Однако в этом случае поле конфликта отображает мини-приложение, которое было только что вставлено в макет по умолчанию (the CheckBox
).
Если щелкнуть "Игнорировать конфликт", конструктор разрешает конфликт, что позволяет мини-приложению, отображаемого в поле конфликта, перетаскиваться в макет, в котором отсутствует мини-приложение (в данном случае макет большого участка ):
Как показано в предыдущем примере с Button
приложением, не имеет красного маркера изменения, CheckBox
так как LinearLayout
только изменения, примененные в макете больших земель .
Сохраняемость конфликтов
Конфликты сохраняются в файле макета в виде XML-комментариев, как показано ниже:
<!-- Widget Inserted Conflict | id:__root__ | @+id/checkBox1 -->
Поэтому при закрытии и повторном открытии проекта все конфликты по-прежнему будут там , даже те, которые были проигнорированы.