Как установить цвет текста 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);

    Там, где у вас есть альфа-канал, а затем значение цвета.

Ознакомьтесь с полным руководством, конечно, публичный класс Color extends Object .


1 Этот код также был здесь:

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

Этот метод теперь устарел в Android M. Однако вы можете использовать его из contextCompat в библиотеке поддержки , как показано в примере.


2
Кроме того, если текст является ссылкой, необходимо использовать text.setLinkTextColor (...); в коде или Android: textColorLink = "..." в XML
WOUNDEDStevenJones

1
@Nanne Было бы хорошо, если бы в вашем ответе также упоминалось, что R.color.XXX является ссылкой на цвет. Это означает, что для ясности его необходимо разыменовать (как в вашем примере).
nyaray

Я не уверен, что ты имеешь в виду? Как в, разыменованный и так будет использовать больше ресурсов или вы имеете в виду что-то еще?
Нанн

Есть ли какой-нибудь способ сказать, собирается ли конкретное значение цвета пропустить текст?
Кристофер Массер

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()является функцией-членом Context Для адаптеров используйте 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-зеленый b-синий


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-> colors.xml как

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

    Теперь установите цвет в классе xml или actvity как

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

    а для альфа (прозрачный) 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. Это должно дать вам красный.


По моему опыту, это не так, и можно использовать значение RGB вместо значения ARGB
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) у вас есть создать черный цвет в color.xml.

ИЛИ

text.setTextColor(Color.parseColor("#000000")) здесь введите желаемый hexcode

ИЛИ

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
Джан Гомен

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-файл с именем Colors в папке res / values.

My Colors.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-файла, я использовал этот код: valor это TextView, а ctx это объект Context. Я использую его не из Activity, а через 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.