Как автоматически менять чертежи в зависимости от вкуса?

Я работаю над очень грязным приложением и впервые со вкусами. Приложение имеет около 4,5 вариантов, все с одинаковыми цветами фона, рисунками и т. Д. Отличается только логотип.

Теперь мне нужно сделать новый аромат с совершенно другим макетом. Цвет фона должен быть желтым, а не серым, а рисуемые изображения должны быть черными, а не белыми. Проблема в том, что у меня около 100 разных белых изображений. Есть ли способ, которым я могу автоматически изменить их на черный? (дизайнер может перерисовать их или что-то еще, чтобы они были черными, и я могу поместить их в папку с возможностью рисования этого аромата) Или мне нужно было бы программно проверить, используется ли новый аромат, а затем вызвать setDrawable (newBlackImage) для каждого виджета, который использует белый цвет? Это кажется очень сложным способом, поскольку все чертежи задаются с помощью XML-макета.

То, как они использовали ароматы, заключалось в создании файла bool ресурса, а затем в коде проверяли, имеет ли какой-либо ключ значение true/false, а затем скрывали/показывали некоторые вещи... Итак, я предполагаю, что должен сделать что-то подобное с этим, или нет?

Вот как выглядит структура проекта для одного из моих вариантов:

введите здесь описание изображения

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


person joe    schedule 08.06.2017    source источник
comment
Если вы используете VectorDrawables вместо ресурсов изображений, их можно программно тонировать, не используя другие файлы.   -  person Hobo Joe    schedule 09.06.2017
comment
К сожалению, все они являются изображениями :/ Дизайнер сказал мне, что может прислать мне черные, так что это не проблема. Основная проблема в том, что у меня есть макет, который устанавливает src для просмотра изображений как один из белых значков. Я просто хочу, чтобы не менять его на черные программно   -  person joe    schedule 09.06.2017


Ответы (1)


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

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

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

Краткое руководство можно найти здесь: https://medium.com/@thiagolopessilva/the-handling-multiple-java-source-and-resources-using-flavors-on-gradle-18a4b581285b

person ansorod    schedule 08.06.2017
comment
Это отличная статья, tnx человек! Теперь я понимаю это лучше, поэтому я обновил свой вопрос, чтобы вы могли видеть, неверна ли структура моего проекта. Возможно, проблема в том, что все мои белые значки находятся внутри основной папки с возможностью рисования, а все макеты находятся внутри основной папки макета. У каждого варианта есть только разные значки запуска. Так что, если я изменю что-то в одном макете, все вкусы будут иметь это изменение. Если я вас правильно понял, эта структура вкуса, которую я показал вам выше, должна иметь выдвижную папку с черными значками, верно? Но тогда для того, чтобы назначать эти значки, также должны быть все макеты? - person joe; 09.06.2017
comment
Может быть, поскольку все ароматы используют одинаковые макеты, я могу создать, поместить все черные значки в эту папку с возможностью рисования ароматов и назвать их так же, как белые? Таким образом, макет будет иметь ImageView с полем android:src=@drawable/ic_add_white_24dp, поэтому, если мой вариант имеет ic_add_white_24dp внутри его рисования (но он будет черным), он будет использовать его. - person joe; 09.06.2017
comment
Это правильно. Ресурсы в main являются вашим базовым уровнем, любые ресурсы в папках с тем же путем/именем переопределяют их в приложении. - person Hobo Joe; 09.06.2017
comment
Извините за задержку с ответом, но вы все правильно поняли. - person ansorod; 16.06.2017