Разрешенный цвет вместо идентификатора ресурса

Недавно в моем коде появилась ошибка 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);

По-видимому, это вызвано ворсом; третья пуля вниз.

Новые правила Lint

Вы могли бы, вероятно, прекратить это или попробовать реализовать их синтаксис.

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