Android TextView: установка цвета фона динамически не работает


169

Установка цвета фона программно для Android TextViewне работает. Я что-то упустил!

TextView et = new TextView(activity);
et.setText("350");
et.setBackgroundColor(R.color.white);

У меня также есть этот файл (colors.xml) в моей папке res / values

<resources>
        <color name="white">#ffffffff</color>
        <color name="black">#ff000000</color>
</resources>

[РЕДАКТИРОВАТЬ]: Кроме того, установка цвета текста приводит к исчезновению TextView.

TextView c1 = new TextView(activity);
c1.setTextColor(R.color.solid_red);
c1.setText("My Text");

Ответы:


333

использование et.setBackgroundResource(R.color.white);


5
API-интерфейс Android - это нечто, почему он не может выдать ошибку?
Тавани

53
Потому что это не ошибка. setBackgroundColor () принимает цвет в числовой форме (например, 0xFFFF0000 для красного). R.color.white - это тоже число.
CommonsWare

6
D'о! Это определенно можно было бы сделать лучше с помощью перечислений, а не вездесущих. Спасибо за ответ.
Войцех Гурски

2
Они могут использовать разные типы подписей! Один называется ColorId, а другой - HexColor или что-то в этом роде. Оба являются целыми числами, но они не одного типа

1
Очень странно. Из документации: ресурс должен ссылаться на объект Drawable или 0 для удаления фона.
Артем

73

Попробуй это:

TextView c1 = new TextView(activity);
c1.setTextColor(getResources().getColor(R.color.solid_red));
c1.setText("My Text");

Я согласен, что цвет и ресурс имеют одинаковый тип, но я также трачу несколько часов, чтобы найти это решение.


2
Я не совсем понимаю это прямо сейчас (глядя на API), но это работает, так что спасибо!
CodeJustin.com

Спасибо, вы сэкономили мне несколько часов! Теперь, когда я знаю решение, оно имеет смысл для меня, но я уверен, что мне потребовалось бы несколько часов, чтобы понять это самостоятельно.
FreewheelNat

Спасибо. Android API иногда не интуитивно понятен.
suDocker

64

Чтобы установить красный цвет:

textView.setBackgroundColor(0xfff00000);

Или

<color name="solid_red">#fff00000</color>

textView.setBackgroundResource(R.color.solid_red);

1
Чтобы повторить ответ badMonkey, учитывая, что это более популярный ответ, вы ДОЛЖНЫ установить биты старшего разряда в ненулевое значение для прозрачности. Меня все время ловят, указывая RGB без буквы A. Чтобы установить чистый синий фон, используйте 0xff0000ff, а не 0x0000ff, иначе он не будет работать.
JohnnyLambada

В .xml значение элемента <color> работает только с классическими 6 цифрами: # FF0000
Оружие X

@WeaponX: отлично работает с прозрачными цветами (8 цифр).
CoolMind

@Weapn X Функция принимает целое число, 4 байта. 6 шестнадцатеричных цифр составляют 3 байта.

20

У меня была похожая проблема, когда я создавал числовой цвет без учета ведущего альфа-канала. то есть. mytext.setTextColor(0xFF0000)(думая, что это будет красным). Хотя это красный цвет, он также на 100% прозрачен, так как it = 0x00FF0000; правильное значение 100% непрозрачно - 0xFFFF0000или mytext.setTextcolor(0xFFFF0000).



8

У меня была ситуация, когда веб-сервис возвращал цвет в шестнадцатеричном формате, например "# CC2233", и я хотел поместить этот цвет в textView с помощью setBackGroundColor (), поэтому я использовал класс Android для получения значения int шестнадцатеричной строки и передал его упомянутая функция. Все работало Это пример:

String myHexColor = "#CC2233";
TextView myView = (TextView) findViewById(R.id.myTextView);
myView.setBackGroundColor(Color.pasrsehexString(myHexColor));

PS опубликовал этот ответ, потому что другие решения не работали для меня. Надеюсь, это кому-нибудь поможет :)


5

здесь в мелочах,

если вы в деятельности, используйте это

textview.setBackground(ContextCompat.getColor(this,R.color.yourcolor));

если вы во фрагменте используйте код ниже

textview.setBackground(ContextCompat.getColor(getActivity(),R.color.yourcolor));

если вы используете адаптер повторного использования, используйте приведенный ниже код

textview.setBackground(ContextCompat.getColor(context,R.color.yourcolor));

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment

4

Вот шаги, чтобы сделать это правильно:

  1. Прежде всего, объявите экземпляр TextView в вашем MainActivity.java следующим образом:

    TextView mTextView;
  2. Установите некоторый текст DYNAMICALLY (если хотите) следующим образом:

    mTextView.setText("some_text");
  3. Теперь, чтобы установить цвет фона, вам нужно определить свой собственный цвет в файле res-> values-> colors.xml следующим образом:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Теперь вы можете использовать цвет «my_color» в вашем Java-файле для динамической установки фона следующим образом:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")не работал для меня, вместо этого Color.parseColor("17ee27")работал отлично.


2

два способа сделать это:

1. создать цвет в файле colors.xml, например:

<resources>
        <color name="white">#ffffff</color>
</resources>

и использовать его в классе активности Java как:

et.setBackgroundResource(R.color.white);

2.

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));

2

Если вы хотите поддерживать все версии: Попробуйте это:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 


-10

Вы можете использовать android:textColor= "любой цвет текста, который вы хотите указать "в XML-файле, где ваше текстовое представление объявлено.


Программно ... не xml
19
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.