Изменение цвета с помощью LinearLayout и TextView в Java (Android) - PullRequest
3 голосов
/ 17 января 2011

Я относительно новый разработчик для Android, и я заметил странную вещь, которую, надеюсь, кто-то сможет объяснить.У меня есть LinearLayout ll.

Эта строка кода завершается с ошибкой при выполнении:

ll.setBackgroundColor(R.color.white);

Однако эта строка кода работает:

ll.setBackgroundResource(R.color.white);

Я предполагаю, что это просто, потому что я определил белыйв моих ресурсах.Однако я также попытался передать 0xFFFFFF в setBackgroundColor (), и это тоже не сработало.

Аналогично с моим текстом TextView эта строка кода завершается с ошибкой при выполнении:

text.setTextColor(R.color.white);

IЯ вижу мой TextView, поэтому я знаю, что я его правильно инициализировал (как и мой LinearLayout, который я также вижу).Поэтому я предполагаю, что мой вопрос сводится к следующему: как правильно использовать LinearLayout.setBackgroundColor () и TextView.setTextColor ()?

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

Ответы [ 3 ]

16 голосов
/ 17 января 2011

Rob

Проблема в том, что setBackgroundColor () ищет цветной объект. Поэтому вам нужно использовать что-то вроде строки ниже

ll.setBackgroundColor(Color.WHITE);

или

ll.setBackgroundColor(Color.parseColor("#ffffff"));

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

ll.setBackgroundResource(R.something.mydrawable);
4 голосов
/ 17 января 2011

R.color.whatever является инт. Он автоматически создается как ссылка на внешне определенный (в XML) ресурс. Когда вы вызываете setBackgroundColor с этим целым числом, он пытается проанализировать значение этого int как Color. setBackgroundResource ожидает получить целое число ресурса, переданное ему. Он извлекает внешне определенное значение, а затем применяет цвет таким образом. Что касается setBackgroundColor, попробуйте использовать цвет с полным шестнадцатеричным значением с включенной альфа, например, 0xFFFFFFFF (где первые два значения F являются альфа-значением).

РЕДАКТИРОВАТЬ: побит Марк! : P

0 голосов
/ 12 марта 2011

В моем случае мне приходилось использовать как цветовые вставки, так и цвета, определенные в ресурсе. Хотя оба они были целыми числами, они должны были иметь определенный формат для работы с setBackgroundColor (int colorInt) и setBackgroundResource (int resourceIdOfColor).

Я использовал:

int colorInt = getResources().getColor(R.color.resourceIdOfColor)

чтобы получить резиденты в формате цвета int, поэтому я мог бы везде использовать setBackgroundColor.


Вы можете использовать аннотации, чтобы различать их в своем коде:

@ColorInt
private int getColor(@ColorRes int id) {
    return getResources().getColor(id);
}

API-интерфейсы платформы Android должны быть уже аннотированы:

public void setBackgroundResource(@DrawableResource int id);
public void setBackgroundColor(@ColorInt int color);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...