Показать макеты в Android Studio в зависимости от вкуса

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

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

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

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

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

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

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

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

Rajasekaran M 22.05.2019 13:38

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

Invader Zim 22.05.2019 14:30

есть ли какой-нибудь файл цветовых ресурсов в main?

Moinkhan 27.05.2019 10:05
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
13
3
4 092
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Ответ принят как подходящий

Let me blow out some dusts first :

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

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

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

Именно поэтому все работает идеально.


Now back to point : (Hack)

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

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

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

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

Редактировать:


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

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

enter image description here

Теперь содержимое аромат B и вкусW отличается для файла цвета.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>

вкусW содержит:

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

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

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

enter image description here

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

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

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

Спасибо, я сам думал о таких вещах, но надеялся, что Android Studio сможет решить это для меня без взлома. Принимаю ваш ответ, так как сделаю что-то похожее: по умолчанию будет для тестирования, а варианты будут для окончательных сборок. Поэтому, если я хочу протестировать аромат A, я устанавливаю ресурсы аромата A по умолчанию, а если я хочу аромат B, я устанавливаю аромат B.

Invader Zim 27.05.2019 12:18

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

Jeel Vankhede 27.05.2019 12:24

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

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 в своем макете.

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

Invader Zim 27.05.2019 12:21

Другие вопросы по теме