2016-10-02 2 views
2

В моей values папке у меня есть my_colors.xml:Возможно ли получить цвет со строкой?

<resources> 
    <!-- Orange --> 
    <color name="orangePrimary">#f6a02d</color> 
    <color name="orange1">#e3952a</color> 
    <color name="orange2">#da8f28</color> 
    <color name="orange3">#d08926</color> 
</resources> 

Есть ли способ, чтобы получить эти цвета только со строкой его имени? Что-то вроде view.setBackgroundColor.getColor("orange1");

Для изображений у вас есть это getResources().getIdentifier("my_image", "drawable", getPackageName());

Надеется, что вы, ребята, знаете, что я имею в виду. Приветствия.

ответ

4

Вы пробовали следующее:

int desiredColour = getResources().getColor(getResources().getIdentifier("my_color", "color", getPackageName())); 

Надеется, что это помогает!

+0

Да, Рейз Мёршед предложил, прежде чем он изменил свой ответ. «wishColour» всегда ошибается, я не знаю, почему, но в моем случае его всегда тот темный прозрачный фиолетовый. – kuemme01

+0

Конечно, я обновил свой ответ. Сначала вы получите идентификатор ресурса, тогда вы должны получить цвет от Идентификатор ресурса – mihanovak1024

+0

UUhhhh, thats working! Но разве я не получал проблем в будущем с этим устаревшим методом getColor()? – kuemme01

0

Начиная с Android Поддержка библиотеки 23, новый GetColor() метод был добавлен в ContextCompat.

Так, просто позвоните:

ContextCompat.getColor(context, R.color.your_color); 

Другой один depracated getResources.getColor() Таким образом, вы должны реализовать выше. Нет никакого способа просто передать имя цвета для доступа к нему. вы должны указать идентификатор цвета из вашего цветного файла.

+0

thats so uncool! У меня есть 8 разных цветов, каждый с 4 различными цветовыми температурами. Чтобы узнать, какой из них нужен, я получаю строку типа «оранжевый». – kuemme01

1

Хорошо, я получил цвет по имени, используя отражение сейчас, и получил это, работая в моей стороне.

Вам необходимо написать такую ​​функцию.

public int getColorByName(String name) { 
    int colorId = 0; 

    try { 
     Class res = R.color.class; 
     Field field = res.getField(name); 
     colorId = field.getInt(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return colorId; 
} 

Теперь получить идентификатор ресурса с помощью

int resourceId = getColorByName("orange1"); 

И установить Drawable как ресурс в вашем ImageView, как это.

imageView.setBackgroundResource(resourceId); 

Я попытался установить img.setBackgroundColor(resourceId), который устанавливающее неправильный цвет.

В вашем случае я хотел бы предложить, чтобы сохранить цвета в типизированном массиве в вашем res/values/arrays.xml как этого

<array name="colors"> 
    <item>#FFFF0000</item> 
    <item>#FF00FF00</item> 
    <item>#FF0000FF</item> 
</array> 

Смотрите разработчик документ для Typed Array о том, как использовать его.

+0

nope, не работает. Всегда возвращаю 0. – kuemme01

+0

Да, попробовал, положил, вернул неправильный цвет. Цвет, который я не создавал, какой-то темный прозрачный фиолетовый. – kuemme01

+0

См. Обновленный ответ, пожалуйста. У меня это работало на моей стороне. –

Смежные вопросы