Позвольте мне сначала выбросить немного пыли:
Вы получаете цвета по умолчанию в ваших файлах макетов, потому что ваши макеты находятся в папке по умолчанию (основной пакет в этом случае) .
Здесь происходит следующее: когда вы создаете сборку определенного варианта (скажем, flavour ), система упаковки берет файлы, относящиеся к этим вариантам, которые дублируются из папки по умолчанию, и заменяет их, чтобы предоставить вам специфическая для аромата сборка .
Итак, ваш сгенерированный apk-файл содержит специфичные для аромата файлы (colors.xml в вашем случае) + файлы по умолчанию из основной (папка res из основного, как и все макеты и другие ресурсы и файлы вашего класса) , которые не являются частью вашей конкретной папки.
Вот почему все работает отлично.
Теперь вернемся к точке: (Взломать)
Что вы должны сделать, чтобы увидеть макеты с ароматическими цветами?
«Хотя я бы не рекомендовал этот способ», если у вас нет другой логики компоновки для конкретной сборки, все, что вы можете сделать, это поместить определенные файлы компоновки (просто чтобы увидеть обработанный вывод) в вашем папка макета в вашем каталоге flavour .
Итак, теперь он будет принимать цвета из папки flavour и отображать макет в IDE с этими цветами в файле макета.
Примечание: Опять же, это просто хакерский способ видеть разные вещи специфическим образом, а не решение. Несмотря на то, что я не думаю, что есть даже решение этой проблемы, потому что это не проблема, и именно так работает система gradle build с несколькими ароматами, и это не ошибка в этой системе .
Edit:
Итак, после некоторого исследования я выяснил, как вы можете достичь такой цели, что «вы получаете рендеринг, основанный на ваших цветах аромата».
Допустим, у вас разные цвета в зависимости от ваших вкусов, как показано ниже:
Теперь содержимое 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 . Он не выдаст никакой ошибки, если вы не пропустите ни одного специфичного для аромата цвета атрибута для своего «текущего варианта сборки».
проверить основной каталог для моего проекта:
(Как вы можете видеть, основной каталог ресурсов не содержит colors.xml file)
Итак, если вы попытаетесь изменить свой вариант сборки и посмотреть на любой файл макета из основного, он откажется с этим конкретным цветом продукта.
Примечание: Остерегайтесь этого, если вы добавляете или удаляете один цвет из одного аромата, не забудьте также добавить / удалить его для других ароматов, иначе ваш проект может получить ошибку при сборке. (вы также можете проделать тот же трюк с другими ресурсами, такими как рисованные объекты, макеты, размеры и т. д., просто убедитесь, что в каждом варианте есть все с одинаковым именем ресурса)