Як встановити колір тексту TextView у коді?


544

У XML ми можемо встановити колір тексту за textColorатрибутом, наприклад android:textColor="#FF0000". Але як це змінити за допомогою кодування?

Я спробував щось на кшталт:

holder.text.setTextColor(R.color.Red);

Де holderпросто клас і textє тип TextView. Червоний - значення RGB (# FF0000), встановлене в рядках.

Але він показує інший колір, а не червоний. Який параметр ми можемо передати у setTextColor ()? У документації це сказано int, але це довідкове значення ресурсу чи щось інше?


Примітка про налаштування інтерфейсу користувача в коді. Врахуйте переваги використання інтерфейсу користувача у проектний час, зводячи до мінімуму зміни часу виконання.
АлікЕльзін-кілака

Відповіді:


1245

Ви повинні використовувати:

holder.text.setTextColor(Color.RED);

Ви можете використовувати різні функції з Colorкласу, щоб отримати однаковий ефект, звичайно.

  • Color.parseColor (Посібник) (як LEX використовує)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbі Color.argb( Manual rgb ) ( Manual argb ) (як Ganapathy використовує)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • І звичайно, якщо ви хочете визначити свій колір у XMLфайлі, ви можете зробити це:

    <color name="errorColor">#f00</color>

    тому що getColor()функція застаріла 1 , її потрібно використовувати так:

    ContextCompat.getColor(context, R.color.your_color);
  • Ви також можете вставити звичайний HEX, як-от так:

    myTextView.setTextColor(0xAARRGGBB);

    Там, де спочатку є альфа-канал, потім значення кольору.

Перегляньте повний посібник, звичайно, публічний клас Колір розширює об’єкт .


1 Цей код також був тут:

textView.setTextColor(getResources().getColor(R.color.errorColor));

Цей метод тепер застарілий в Android M. Однак ви можете використовувати його з контекстуCompat в бібліотеці підтримки , як показано в прикладі.


2
Крім того, якщо текст є посиланням, вам потрібно використовувати text.setLinkTextColor (...); у коді чи андроїді: textColorLink = "..." у XML
ЧИСЛЕНОStevenJones

1
@Nanne Було б добре, якби у вашій відповіді також було зазначено, що R.color.XXX - це посилання на колір. Тобто, для чіткості його потрібно скасувати (як це є у вашому прикладі).
нярай

Я не впевнений, що ти маєш на увазі? Як, наприклад, dereferenced і так буде використовувати більше ресурсів або ви маєте на увазі щось інше?
Нанна

Чи є спосіб визначити, чи певне значення кольору дозволить тексту зникнути?
Крістофер Массер

6
getColor(int)застаріло.
RestInPeace

137

Якщо ви все ще хочете вказати свої кольори у вашому XML-файлі:

<color name="errorColor">#f00</color>

Потім посилайтеся на це у своєму коді одним із цих двох методів:

textView.setTextColor(getResources().getColor(R.color.errorColor, getResources().newTheme()));    

або

textView.setTextColor(getResources().getColor(R.color.errorColor, null));

Перший, мабуть, кращий, якщо ви збираєтесь на Android M, проте тема, яку ви передаєте, може бути нульовою, тож, можливо, вам це простіше?

І якщо ви використовуєте бібліотеку Compat, ви можете зробити щось подібне

textView.setTextColor(ContextCompat.getColor(context, R.color.errorColor));

9
Чому для setTextColor потрібно приймати getResources (). GetColor (), а не пряму посилання R.color.errorColor? R.color.x працює майже для кожного іншого методу. Неймовірно засмучує!
Цивільний

8
@Civilian: оскільки параметр int, який вимагають методи setXXXColor (), приймається як фактичне значення ARGB для використання, а не значення для пошуку у файлі ресурсів. Як не дивно, у класі View є і setBackgroundColor (), і setBackgroundResource (), тоді як TextView відсутній метод setTextResource ().
Ян Кемп

1
getColor(int)застаріло. ContextCompat.getColor(getContext(), R.color.yourColor);здається, заміною.
RestInPeace

45

І ще один:

TextView text = (TextView) findViewById(R.id.text);
text.setTextColor(Color.parseColor("#FFFFFF"));

1
getResources()є функцією члена контексту. Для адаптерів використовуйте getContext().getResources(). Значення кольорів повинні надходити до ресурсів, як у відповіді @ xbakesx.
C0D3LIC1OU5

40

Ви також можете це зробити лише з XML-файлу.

Створіть color.xmlфайл у папці значень:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="textbody">#ffcc33</color>

</resources>

Потім у будь-якому XML-файлі ви можете встановити колір тексту, використовуючи,

android:textColor="@color/textbody"

Або ви можете використовувати цей колір у файлі Java:

final TextView tvchange12 = (TextView) findViewById(R.id.textView2);
//Set color for textbody from color.xml file
tvchange1.setTextColor(getResources().getColor(R.color.textbody));

27

Можна використовувати

holder.text.setTextColor(Color.rgb(200,0,0));

Ви також можете вказати, який колір ви хочете за допомогою прозорості.

holder.text.setTextColor(Color.argb(0,200,0,0));

a для альфа (прозорого) значення r-червоний g-green b-blue


15

використовуйте наступний код у layout.xml

<TextView  android:id="@+id/textView1"    
android:layout_width="wrap_content"    
android:layout_height="wrap_content" 
android:text="@string/add"
android:layout_marginTop="16dp"
android:textAppearance="?
android:attr/textAppearanceMedium"
android:textColor="#25383C"
android:textSize="13sp" />

<TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/add"
        android:layout_marginTop="16dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textColor="#25383C"
        android:textSize="13sp" />

15

Існує багато різних способів встановлення кольору в режимі перегляду тексту.

  1. Додайте значення кольору в студійних res-> values-> color.xml as

    <color name="color_purple">#800080</color>

    Тепер встановіть колір у xml або клас активності як

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Якщо ви хочете вказати кольоровий код, скористайтеся безпосередньо кодом Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Ви також можете використовувати RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. Використання також може використовувати прямий шістнадцятковий код для textView. Ви також можете вставити звичайний HEX, як-от так:

    text.setTextColor(0xAARRGGBB);
  5. Ви також можете використовувати argb зі значеннями альфа.

       text.setTextColor(Color.argb(0,200,0,0));

    a для Альфа (Прозора) v.

  6. І якщо ви використовуєте бібліотеку Compat, ви можете зробити щось подібне

       text.setTextColor(ContextCompat.getColor(context, R.color.color_purple));

9

Я зазвичай роблю це для будь-яких поглядів:

myTextView.setTextColor(0xAARRGGBB);

де

  • AA визначає альфа (00 для прозорого, FF для непрозорого)

  • RRGGBB визначає звичайний HTML-код кольору (наприклад, FF0000 для червоного).


І чому голосування "за"? Чи можете ви додати трохи думок з цього приводу?
AW

7

Якщо ви плануєте використовувати setTextAppearance, ви повинні знати, що він замінить колір тексту зі стилем, успадкованим від теми. Тож якщо ви хочете використовувати обидва, встановіть колір потім .

Це працює:

textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);
textView.setTextColor(Color.RED);

Хоча це призведе до того, що ваш кольоровий колір буде, наприклад, білим (для темної теми) або чорним (для світлої теми):

textView.setTextColor(Color.RED);
textView.setTextAppearance(context, android.R.style.TextAppearance_Medium);

Всупереч цьому в XML порядок довільний.


7
textView.setTextColor(ContextCompat.getColor(getApplicationC‌​ontext(),R.color.col‌​orWhite)); 

У colors.xmlфайл напишіть код нижче:

<color name="colorWhite">#FFFFFF</color>

6

Я вважаю, що якщо ви хочете вказати колір як ресурс (у файлі XML ), вам доведеться вказати його значення ARGB (а не просто значення RGB).

Спробуйте змінити значення кольору на #FFFF0000. Це повинно дати вам ЧЕРВОНУ.


на мій досвід, це неправда, і замість значення
ARGB

6

text.setTextColor(getResource().getColor(R.color.black)) ви створили чорний колір у color.xml.

АБО

text.setTextColor(Color.parseColor("#000000")) тут введіть бажаний гек-код

АБО

text.setTextColor(Color.BLACK) ви можете використовувати статичні кольорові поля


5

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

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));


4

За допомогою адаптера ви можете встановити колір тексту за допомогою цього коду:

holder.text_view = (TextView) convertView.findViewById(R.id.text_view);
holder.text_view.setTextColor(Color.parseColor("#FF00FF"));

4
TextView text = new TextView(context);
text.setTextColor(Color.parseColor("any hex value of a color"));

Вище код працює з мого боку. Ось textце TextView , на якому потрібно колір повинен бути встановлений.



2

Від API 23 надалі getResources().getColor()застаріло.

Використовуйте це замість:

textView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.color_black));


1

За допомогою адаптера ви можете встановити колір тексту за допомогою цього коду:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));

1

якщо ви хочете вказати код кольору безпосередньо, тоді використовуйте

textView.setTextColor(Color.parseColor("#ffffff"));

або якщо ви хочете надати колірний код із папки кольорів, тоді використовуйте

textView.setTextColor(R.color.white);

цей код textView.setTextColor (R.color.white); не працює. Ви можете використовувати text.setTextColor (getResources (). GetColor (R.color.color_purple) для отримання кольору з вашого color.xml
Gian Gomen

1

Для того, щоб встановити колір TextView, TextView.setTextColor(R.color.YOURCOLOR)недостатньо!

Це потрібно використовувати так -

TextView myText = (TextView) findViewById(R.id.YoutTextViewID);

myText.setTextColor(getResources().getColor(R.color.YOURCOLOR);

АБО

myText.setTextColor(Color.parseColor("#54D66A"));


0

Так само я використовував color.xml:

<color name="white">#ffffff</color>
    <color name="black">#000000</color>   

Щоб встановити TextViewфон, наприклад:

textView.setTextColor(R.color.white);

Я отримував інший колір, але коли я використав наведений нижче код, я отримав фактичний колір.

textView.setTextColor(Color.parseColor("#ff6363"));

0

Я зробив так: Створіть XML-файл, який називається Кольори в папці res / values.

Мої кольори.xml:

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="vermelho_debito">#cc0000</color>
    <color name="azul_credito">#4c4cff</color>
    <color name="preto_bloqueado">#000000</color>
    <color name="verde_claro_fundo_lista">#CFDBC5</color>
    <color name="branco">#ffffff</color>
    <color name="amarelo_corrige">#cccc00</color>
    <color name="verde_confirma">#66b266</color>
</resources>

Щоб отримати ці кольори з файлу xml, я використав цей код: доблесть це TextView, а ctx - це об'єкт контексту. Я використовую його не від діяльності, а від BaseAdapter до ListView. Ось чому я використовував цей контекстний об’єкт.

valor.setTextColor(ctx.getResources().getColor(R.color.azul_credito));

Сподіваюся, це допомагає.


0

Для надання значень rgb: text.setTextColor(Color.rgb(200,0,0));
для розбору кольору з шестигранним значенням: text.setTextColor(Color.parseColor("#FFFFFF"));


0

Якщо ви перебуваєте в адаптері і все ще хочете використовувати колір, визначений у ресурсах, ви можете спробувати наступний підхід:

holder.text.setTextColor(holder.text.getContext().getResources().getColor(R.color.myRed));

0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);

0

getColor () застаріло

Тож спробуйте таким чином:

 tv_title.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.sf_white));

0

Я робив це для TextView в ViewHolder для RecyclerView. Я не дуже впевнений чому, але це не спрацювало для мене при ініціалізації ViewHolder.

public ViewHolder(View itemView) {
    super(itemView);
    textView = (TextView) itemView.findViewById(R.id.text_view);
    textView.setTextColor(context.getResources().getColor(R.color.myColor));
    // Other stuff
}

Але коли я перемістив його на onBindViewHolder, він працював чудово.

public void onBindViewHolder(ViewHolder holder, int position){
    // Other stuff
    holder.textView.setTextColor(context.getResources().getColor(R.color.myColor));
}

Сподіваюся, що це комусь допоможе.

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