Jak ustawić kolor tekstu TextView w kodzie?


544

W XML możemy ustawić kolor tekstu za pomocą textColoratrybutu, np android:textColor="#FF0000". Ale jak to zmienić, kodując?

Próbowałem czegoś takiego:

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

Gdzie holderjest tylko klasa i textjest typu TextView. Kolor czerwony to wartość RGB (# FF0000) ustawiona w ciągach znaków.

Ale pokazuje inny kolor niż czerwony. Jaki parametr możemy przekazać w setTextColor ()? W dokumentacji jest napisane int, ale czy jest to wartość odniesienia zasobu czy coś jeszcze?


Uwaga na temat poprawiania interfejsu użytkownika w kodzie, należy rozważyć zalety oglądania interfejsu użytkownika w czasie projektowania, minimalizując zmiany czasu wykonywania do minimum.
AlikElzin-kilaka

Odpowiedzi:


1245

Powinieneś użyć:

holder.text.setTextColor(Color.RED);

Możesz Coloroczywiście użyć różnych funkcji z klasy, aby uzyskać ten sam efekt.

  • Color.parseColor (Ręcznie) (podobnie jak w LEX)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbi Color.argb( Manual rgb ) ( Manual argb ) (podobnie jak Ganapathy)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
    
  • I oczywiście, jeśli chcesz zdefiniować kolor w XMLpliku, możesz to zrobić:

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

    ponieważ getColor()funkcja jest przestarzała 1 , musisz jej używać w następujący sposób:

    ContextCompat.getColor(context, R.color.your_color);
  • Możesz także wstawić zwykły HEX, np .:

    myTextView.setTextColor(0xAARRGGBB);

    Tam, gdzie najpierw jest kanał alfa, potem wartość koloru.

Sprawdź całą instrukcję oczywiście, klasa publiczna Kolor rozszerza obiekt .


1 Ten kod również tu był:

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

Ta metoda jest teraz przestarzała w Androidzie M. Możesz jednak użyć jej z kontekstuKompat w bibliotece obsługi , jak pokazano w przykładzie.


2
Ponadto, jeśli tekst jest linkiem, musisz użyć text.setLinkTextColor (...); w kodzie lub systemie Android: textColorLink = "..." w XML
WOUNDEDStevenJones

1
@Nanne Byłoby miło, gdybyś w swojej odpowiedzi wspomniał także, że R.color.XXX jest odniesieniem do koloru. Oznacza to, że należy je wyodrębnić (jak w twoim przykładzie), dla jasności.
nyaray

Nie jestem pewny co masz na myśli? Jak w, wyrejestrowany, a więc zużyje więcej zasobów, czy masz na myśli coś innego?
Nanne

Czy jest jakiś sposób na stwierdzenie, czy określona wartość koloru pozwoli zniknąć tekstowi?
Christopher Masser

6
getColor(int)jest przestarzałe.
RestInPeace

137

Jeśli nadal chcesz określić kolory w pliku XML:

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

Następnie odwołaj się do niego w kodzie za pomocą jednej z tych dwóch metod:

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

lub

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

Pierwszy jest prawdopodobnie preferowany, jeśli kompilujesz na Androidzie M, jednak motyw, który przekazujesz, może być zerowy, więc może to jest dla ciebie łatwiejsze?

A jeśli korzystasz z biblioteki Compat, możesz zrobić coś takiego

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

9
W przypadku setTextColor, dlaczego musi on pobierać getResources (). GetColor () zamiast bezpośredniego odwołania R.color.errorColor? R.color.x działa na prawie każdą inną metodę. Niesamowicie frustrujące!
Civilian

8
@Civilian: ponieważ parametr int wymagany przez metody setXXXColor () jest brany jako rzeczywista wartość ARGB, a NIE wartość do wyszukania w pliku zasobów. O dziwo, klasa View ma zarówno setBackgroundColor (), jak i setBackgroundResource (), podczas gdy TextView nie ma metody setTextResource ().
Ian Kemp,

1
getColor(int)jest przestarzałe. ContextCompat.getColor(getContext(), R.color.yourColor);wydaje się być zamiennikiem.
RestInPeace

45

I kolejny:

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

1
getResources()jest funkcją członka kontekstu. W przypadku adapterów użyj getContext().getResources(). Wartości kolorów powinny trafić do zasobów, jak w odpowiedzi @ xbakesx.
C0D3LIC1OU5

40

Możesz to zrobić tylko z pliku XML.

Utwórz color.xmlplik w folderze wartości:

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

</resources>

Następnie w dowolnym pliku XML możesz ustawić kolor tekstu za pomocą,

android:textColor="@color/textbody"

Lub możesz użyć tego koloru w pliku 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

Możesz użyć

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

Możesz także określić pożądany kolor za pomocą opcji Przezroczystość.

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

a dla wartości alfa (przezroczystej) r-czerwony g-zielony b-niebieski


15

użyj następującego kodu w 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

Istnieje wiele różnych sposobów ustawiania koloru w widoku tekstu.

  1. Dodaj wartość koloru w studio res-> wartości-> colors.xml as

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

    Teraz ustaw kolor w klasie xml lub actvity jako

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Jeśli chcesz podać kod koloru, użyj poniższego kodu Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Możesz także użyć RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. Użyj może również użyć bezpośredniego kodu szesnastkowego dla textView. Możesz także wstawić zwykły HEX, np .:

    text.setTextColor(0xAARRGGBB);
  5. Możesz także użyć argb z wartościami alfa.

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

    a dla Alpha (przezroczysty) v.

  6. A jeśli korzystasz z biblioteki Compat, możesz zrobić coś takiego

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

9

Zwykle robię to dla dowolnych widoków:

myTextView.setTextColor(0xAARRGGBB);

gdzie

  • AA definiuje alfa (00 dla przezroczystych, FF dla nieprzezroczystych)

  • RRGGBB definiuje normalny kod koloru HTML (jak FF0000 dla czerwonego).


A dlaczego głosowanie w dół? Czy możesz dodać jakieś przemyślenia na ten temat?
AW

7

Jeśli planujesz użyć setTextAppearance , powinieneś wiedzieć, że zastąpi kolor tekstu stylem odziedziczonym z motywu. Więc jeśli chcesz używać obu, ustaw kolor później .

To działa:

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

Chociaż spowoduje to, że kolor tekstu będzie na przykład biały (dla ciemnego motywu) lub czarny (dla jasnego motywu):

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

W przeciwieństwie do tego w XML kolejność jest dowolna.


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

W colors.xmlpliku wpisz poniższy kod:

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

6

Uważam, że jeśli chcesz określić kolor jako zasób (w pliku XML ), musisz podać jego wartość ARGB (nie tylko wartość RGB).

Spróbuj zmienić wartość koloru na #FFFF0000. Powinien dać ci CZERWONY.


z mojego doświadczenia wynika, że ​​to nieprawda i możliwe jest użycie wartości RGB zamiast wartości ARGB
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) masz kolor czarny w color.xml.

LUB

text.setTextColor(Color.parseColor("#000000")) tutaj wpisz żądany kod szesnastkowy

LUB

text.setTextColor(Color.BLACK) możesz użyć statycznych pól kolorów


5

Posługiwać się:

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

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

lub

myTextView.setTextColor(0xAARRGGBB);

4

Za pomocą adaptera możesz ustawić kolor tekstu za pomocą tego kodu:

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

Powyższy kod działa po mojej stronie. Tutaj textjest TextView na których konieczna jest koloru należy ustawić.



2

Począwszy od API 23, getResources().getColor()jest przestarzały.

Zamiast tego użyj tego:

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


1

W adapterze możesz ustawić kolor tekstu za pomocą tego kodu:

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

1

jeśli chcesz podać kod koloru bezpośrednio, użyj

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

lub jeśli chcesz podać kod koloru z folderu kolorów, użyj

textView.setTextColor(R.color.white);

ten kod textView.setTextColor (R.color.white); nie działa Możesz użyć text.setTextColor (getResources (). GetColor (R.color.color_purple) do uzyskania koloru z twojego color.xml
Gian Gomen

1

Aby ustawić kolor TextView, TextView.setTextColor(R.color.YOURCOLOR)nie wystarczy!

Należy go używać w ten sposób -

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

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

LUB

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


0

Podobnie użyłem color.xml:

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

Aby ustawić TextViewtło, takie jak:

textView.setTextColor(R.color.white);

Otrzymywałem inny kolor, ale kiedy użyłem poniższego kodu, otrzymałem właściwy kolor.

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

0

Zrobiłem to w następujący sposób: Utwórz plik XML o nazwie Kolory w folderze res / values.

Moje kolory.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>

Aby uzyskać te kolory z pliku xml, użyłem tego kodu: valor to TextView, a ctx to obiekt Context. Nie używam go z działania, ale BaseAdapter do ListView. Dlatego użyłem tego obiektu kontekstowego.

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

Mam nadzieję, że to pomoże.


0

Aby podać wartości rgb: text.setTextColor(Color.rgb(200,0,0));
Aby parsować kolor z wartości szesnastkowej: text.setTextColor(Color.parseColor("#FFFFFF"));


0

Jeśli korzystasz z adaptera i nadal chcesz używać koloru zdefiniowanego w zasobach, możesz wypróbować następujące podejście:

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

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

0

Metoda getColor () jest przestarzała

Spróbuj więc w ten sposób:

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

0

Robiłem to dla TextView w ViewHolder dla RecyclerView. Nie jestem pewien, dlaczego, ale nie działało to dla mnie podczas inicjalizacji 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
}

Ale kiedy przeniosłem go do onBindViewHolder, działało dobrze.

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

Mam nadzieję, że to komuś pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.