Разрешенный цвет вместо идентификатора ресурса
Недавно в моем коде появилась ошибка lint:
Должен передать разрешенный цвет вместо идентификатора ресурса здесь: getResources(). GetColor (R.color.maps_list_background_color)
MyClass.java / myapp / android / line line 107 Проблема с Android Lint
Я знаю, как ее решить, ответ в ошибке, но я не понимаю, почему они добавили эту ошибку в линтер.
7 ответов
Методы, принимающие цвет в виде целого числа, должны передавать тройку RGB, а не фактический идентификатор ресурса цвета. Вы должны вызвать getResources.getColor(ресурс).
Функция, которую вы вызываете, ожидает целое число, которое является тройкой RGB, а не просто идентификатор цветового ресурса. Идентификатор цветового ресурса по-прежнему является целым числом, но не дает ожидаемого цвета, если он используется в качестве тройки RGB. Чтобы передать ему правильную тройку RGB для вашего цвета, вы должны разрешить его с помощью getResources().getColor(R.color.example_color)
вызов.
Так как я все еще нахожу это в Google, и это устарело, я подумал, что мог бы также поделиться текущим способом сделать это.
проверка getResources().getColor() устарела
ContextCompat.getColor(context, R.color.color_name)
Поскольку getResources().getColor()
устарела, вам нужно сделать это, чтобы получить цвет:
int color = ContextCompat.getColor(getContext(),your_color_id);
Теперь у вас есть цвет относительно текущего контекста. Установите цвет, используя:
your_view.setBackgroundColor(color);
Используйте аннотацию @ColorInt
чтобы подтвердить, что это цвет, а не идентификатор цвета.
Смотрите: android.support.annotation.ColorInt
Что касается меня, это очень глупое предупреждение.
У меня есть собственный класс с функцией:
public static final void setBackgroundColor(View v, int id) {
// Here I get color by id from resources and setBackgroundColor of this color.
}
Во всяком случае, если я попробую позвонить setBackgroundColor
Я получаю предупреждение. Но почему?
Итак, я сделал просто: переименовать setBackgroundColor
в setBackgroundColorr
,
Это предупреждение активировать, если найдено имя color
на имя функции.
И да, мне не нравится название setColorBackground или любое другое:-)
Если вы используете androidx, вы можете:
requireContext().getColor(R.color.myColor);
По-видимому, это вызвано ворсом; третья пуля вниз.
Вы могли бы, вероятно, прекратить это или попробовать реализовать их синтаксис.