android TextView: динамічне встановлення кольору фону не працює


169

Налаштування кольору фону для Android TextViewначебто не працює. Я щось пропускаю!

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

У мене також є цей файл (color.xml) у папці res / values

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

[EDIT]: Також встановлення кольору тексту призводить до зникнення TextView.

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

Відповіді:


332

Використовуйте et.setBackgroundResource(R.color.white);


5
API Android справді щось, чому він не міг помилитися?
Тавані

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

6
D'oh! Це, безумовно, можна було б зробити краще з перерахунками, а не з всюдисущим вступом. Дякую за відповідь.
Войцех Гурський

2
Вони могли використовувати різні підписи! Один називається ColorId, а інший називається HexColor або щось подібне. Обидва цілі числа, але вони не одного типу

1
Дуже дивно. З документації: Ресурс повинен посилатися на об'єкт Dravable або 0 для видалення фону.
Артем

73

Спробуйте це:

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

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


2
Я зараз не повністю його розумію (переглядаю api doc), але це працює, тому дякую!
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 без А. Щоб встановити фон чистого синього, використовуйте 0xff0000ff, а не 0x0000ff або він не працюватиме.
JohnnyLambada

У .xml значення елемента <color> працює лише з класичними 6 цифрами: # FF0000
Weapon 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 Color class, щоб отримати 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. Встановіть текст ДИНАМІЧНО (якщо хочете) таким чином:

    mTextView.setText("some_text");
  3. Тепер, щоб встановити колір тла, потрібно визначити свій власний колір у файлі res-> values-> color.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.створити колір у файлі color.xml, наприклад:

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

і використовувати його int java class як:

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)); 

1

Використання Jut

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);

-10

ви можете використовувати android:textColor= "будь-який колір тексту, який ви хочете надати "у файлі xml, де оголошено перегляд тексту.


Programatically ... не XML
Все
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.