2011-01-17 4 views
3

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

Эта строка кода не может для меня при выполнении:

ll.setBackgroundColor(R.color.white); 

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

ll.setBackgroundResource(R.color.white); 

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

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

text.setTextColor(R.color.white); 

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

Спасибо за тонну. Я прочитал документы и попытался найти информацию в Интернете через googling и ничего не придумал.

ответ

4

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

EDIT: Избитый Марк! : P

+0

Ваше решение о добавлении альфа-бата работало, спасибо огромное :) Решение Mark, я уверен, тоже будет работать, но он не дал мне достаточно информации, чтобы использовать его. Спасибо вам обоим за информацию, но это очень помогло мне :) –

+3

Рад помочь! Чтобы ответить на ваш комментарий по решению Марка, Color - это стандартный импорт Android. Если вы находитесь в Eclipse, просто нажмите Ctrl + Shift + O, чтобы добавить импорт, или если вы хотите его вручную, это 'import android.graphics.Color;' – kcoppock

+0

Спасибо большое :) –

16

Роб,

Проблема заключается в том, что setBackgroundColor() ищет цветового объекта. Таким образом, вы должны использовать что-то вроде линии ниже

ll.setBackgroundColor(Color.WHITE); 

или

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

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

ll.setBackgroundResource(R.something.mydrawable); 
+0

Что мне нужно сделать, чтобы импортировать в использовать цвет? Благодаря! –

1

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

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

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

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


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

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

андроида рамочного API, должен быть аннотированным уже:

public void setBackgroundResource(@DrawableResource int id); 
public void setBackgroundColor(@ColorInt int color); 
Смежные вопросы