Показывать макеты в Android Studio в зависимости от вкуса - PullRequest
11 голосов
/ 22 мая 2019

У меня есть проект в Android Studio, в котором используются разные вкусы для разных цветов (также есть и другие вещи, но они не имеют значения).

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

Допустим, у меня есть ароматы, аромат A по умолчанию и аромат B нет.Допустим, аромат Основной цвет - красный, а основной аромат - зеленый.

Когда я открываю макеты, они всегда отображаются красным, независимо от того, какой аромат выбран в вариантах сборки.

Я уверен, что есть способ сделать это, но я не знаю как.

Edit1: Кажется, я не объяснил это (думал, что это неявно).Мои файлы ресурсов для ароматов уже находятся в разных папках.Цвета в файлах ресурсов имеют одно и то же имя.Это не проблема, проблема в том, что я не вижу цветов в макетах внутри Android Studio.

Цвета находятся в отдельных папках, и все работает как надо.Когда я создаю и устанавливаю ароматы, они используют свои цвета.Но когда я открываю макет, он всегда отображается с цветами по умолчанию в Android Studio

Ответы [ 3 ]

8 голосов
/ 25 мая 2019

Позвольте мне сначала выбросить немного пыли:

Вы получаете цвета по умолчанию в ваших файлах макетов, потому что ваши макеты находятся в папке по умолчанию (основной пакет в этом случае) .

Здесь происходит следующее: когда вы создаете сборку определенного варианта (скажем, flavour ), система упаковки берет файлы, относящиеся к этим вариантам, которые дублируются из папки по умолчанию, и заменяет их, чтобы предоставить вам специфическая для аромата сборка .

Итак, ваш сгенерированный apk-файл содержит специфичные для аромата файлы (colors.xml в вашем случае) + файлы по умолчанию из основной (папка res из основного, как и все макеты и другие ресурсы и файлы вашего класса) , которые не являются частью вашей конкретной папки.

Вот почему все работает отлично.


Теперь вернемся к точке: (Взломать)

Что вы должны сделать, чтобы увидеть макеты с ароматическими цветами?

«Хотя я бы не рекомендовал этот способ», если у вас нет другой логики компоновки для конкретной сборки, все, что вы можете сделать, это поместить определенные файлы компоновки (просто чтобы увидеть обработанный вывод) в вашем папка макета в вашем каталоге flavour .

Итак, теперь он будет принимать цвета из папки flavour и отображать макет в IDE с этими цветами в файле макета.

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

Edit:


Итак, после некоторого исследования я выяснил, как вы можете достичь такой цели, что «вы получаете рендеринг, основанный на ваших цветах аромата».

Допустим, у вас разные цвета в зависимости от ваших вкусов, как показано ниже:

enter image description here

Теперь содержимое flavourB & flavourW отличается для colors.xml файла, но имеет такие же цветовые атрибуты, как:

аромат B содержит:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#757575</color>
    <color name="colorPrimaryDark">#212121</color>
    <color name="colorAccent">#607d8b</color>
</resources>

flavourW содержит:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#6d4c41</color>
    <color name="colorPrimaryDark">#3e2723</color>
    <color name="colorAccent">#33691e</color>
</resources>

Как вы можете заметить, количество цветовых элементов одинаково, но различаются только значения.

TL; DR

Решение: В этом случае вы можете просто удалить colors.xml из папки main / res / values ​​. Он не выдаст никакой ошибки, если вы не пропустите ни одного специфичного для аромата цвета атрибута для своего «текущего варианта сборки».

проверить основной каталог для моего проекта:

enter image description here

(Как вы можете видеть, основной каталог ресурсов не содержит colors.xml file)

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

Примечание: Остерегайтесь этого, если вы добавляете или удаляете один цвет из одного аромата, не забудьте также добавить / удалить его для других ароматов, иначе ваш проект может получить ошибку при сборке. (вы также можете проделать тот же трюк с другими ресурсами, такими как рисованные объекты, макеты, размеры и т. д., просто убедитесь, что в каждом варианте есть все с одинаковым именем ресурса)

4 голосов
/ 25 мая 2019

Я не уверен, возможно ли повлиять на предварительный просмотр макета с помощью ароматов, но это определенно возможно с темами, поэтому позвольте мне предложить обходной путь.

1) Создайте две темы в своем основном исходном наборе:

    <style name="MyStyle">
        <item name="colorPrimary">#44f</item>
    </style>

    <style name="MyStyle.Red">
        <item name="colorPrimary">#f44</item>
    </style>

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

2) Чтобы сделать макеты зависимыми от вкуса, создайте тему, которая унаследует либо MyStyle, либо MyStyle.Red в зависимости от вкуса

В основном наборе источников:

<style name="MyFlavorDependentStyle" parent="MyStyle"/>

В источнике аромата установите:

<style name="MyFlavorDependentStyle" parent="MyStyle.Red"/>

и используйте MyFlavorDependentStyle в макете.

0 голосов
/ 22 мая 2019

если цвета определены в XML, просто переместите определение цвета с main/colors.xml на flavorA/colors.xml и flavorB/colors.xml

...