Android TextView: dynamiczne ustawianie koloru tła nie działa

169

TextViewWydaje się, że programowe ustawianie koloru tła w systemie Android nie działa. Coś mi brakuje!

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

Mam również ten plik (colors.xml) w moim folderze res / values

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

[EDYCJA]: Również ustawienie koloru tekstu powoduje zniknięcie TextView.

TextView c1 = new TextView(activity);
c1.setTextColor(R.color.solid_red);
c1.setText("My Text");
Tawani
źródło

Odpowiedzi:

332

Posługiwać się et.setBackgroundResource(R.color.white);

bhatt4982
źródło
5
Android API to naprawdę coś, dlaczego nie może zgłosić błędu?
Tawani
53
Ponieważ to nie jest błąd. setBackgroundColor () przyjmuje kolor w postaci liczbowej (np. 0xFFFF0000 dla czerwonego). R.color.white to także liczba.
CommonsWare
6
D'oh! Z pewnością można było to zrobić lepiej z wyliczeniami niż wszechobecnymi intami. Dziękuję za odpowiedź.
Wojciech Górski
2
Oni mogli być przy użyciu różnych typów podpisów! Jeden o nazwie ColorId, a drugi o nazwie HexColor lub coś w tym rodzaju. Obie są liczbami całkowitymi, ale nie są tego samego typu
1
Bardzo dziwny. Z dokumentacji: zasób powinien odnosić się do obiektu do rysowania lub 0, aby usunąć tło.
Artem
73

Spróbuj tego:

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

Zgadzam się, że kolor i zasób są tego samego typu, ale poświęcam też kilka godzin na znalezienie tego rozwiązania.

Seb DA ROCHA
źródło
2
Nie do końca to teraz rozumiem (patrząc na api doc), ale to działa, więc dziękuję!
CodeJustin.com
Dzięki, zaoszczędziłeś mi kilka godzin! Teraz, gdy znam rozwiązanie, ma to dla mnie sens, ale jestem pewien, że zajęłoby mi to kilka godzin samodzielnie.
FreewheelNat
Dzięki. Interfejs API systemu Android jest czasami naprawdę nieintuicyjny.
suDocker
64

Aby ustawić kolor czerwony:

textView.setBackgroundColor(0xfff00000);

Lub

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

textView.setBackgroundResource(R.color.solid_red);
Dmitry
źródło
1
Aby powtórzyć odpowiedź badMonkey, biorąc pod uwagę, że jest to bardziej popularna odpowiedź, MUSISZ ustawić bity wyższego rzędu na niezerowe dla przezroczystości. Cały czas daję się złapać, podając RGB bez A. Aby ustawić tło na czysty niebieski, użyj 0xff0000ff, a nie 0x0000ff, inaczej nie zadziała.
JohnnyLambada,
W .xml wartość elementu <color> działa tylko z klasycznymi 6 cyframi: # FF0000
Weapon X
@WeaponX: działa dobrze z przezroczystymi kolorami (8 cyfr).
CoolMind
@Weapn X Funkcja przyjmuje liczbę całkowitą 4 bajty. 6 cyfr szesnastkowych to 3 bajty.
20

Miałem podobny problem, gdy tworzyłem kolor numeryczny bez rozważania wiodącego kanału alfa. to znaczy. mytext.setTextColor(0xFF0000)(myśląc, że to będzie czerwone). Chociaż jest to kolor czerwony, jest również w 100% przezroczysty, ponieważ it = 0x00FF0000; prawidłowa wartość 100% nieprzezroczystości to 0xFFFF0000lub mytext.setTextcolor(0xFFFF0000).

badMonkey
źródło
10

Tylko ta 1 linia kodu programowo zmieniła tło

tv.setBackgroundColor(Color.parseColor("#808080"));
Vivek Warde
źródło
8

Cóż, miałem sytuację, gdy usługa sieciowa zwracała kolor w formacie szesnastkowym, np. "# CC2233" i chciałem umieścić ten kolor na textView za pomocą setBackGroundColor (), więc użyłem klasy Android Color, aby uzyskać wartość int ciągu szesnastkowego i przekazałem go do wspomniana funkcja. Wszystko działało. Oto przykład:

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

PS zamieścił tę odpowiedź, ponieważ inne rozwiązania nie działały dla mnie. Mam nadzieję, że to komuś pomoże :)

user1252459
źródło
5

tutaj jest trochę szczegółów,

jeśli jesteś aktywny, użyj tego

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

jeśli jesteś w fragmencie użyj poniższego kodu

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

jeśli korzystasz z adaptera recyclinglerview, użyj poniższego kodu

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

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment
dharmx
źródło
4

Oto kroki, aby zrobić to poprawnie:

  1. Przede wszystkim zadeklaruj wystąpienie TextView w pliku MainActivity.java w następujący sposób:

    TextView mTextView;
  2. Ustaw tekst DYNAMICZNIE (jeśli chcesz) w następujący sposób:

    mTextView.setText("some_text");
  3. Teraz, aby ustawić kolor tła, musisz zdefiniować własny kolor w pliku res-> values-> colors.xml w następujący sposób:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Możesz teraz użyć koloru „my_color” w pliku java, aby dynamicznie ustawić tło w następujący sposób:

    mTextView.setBackgroundResource(R.color.my_color);
Sahil Sharma
źródło
4
tv.setTextColor(getResources().getColor(R.color.solid_red));
Yash Patil
źródło
3

Color.parseHexColor("17ee27")nie działał dla mnie, zamiast tego Color.parseColor("17ee27")działał idealnie.

Siddharth
źródło
2

można to zrobić na dwa sposoby:

1. utwórz kolor w pliku colors.xml na przykład:

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

i użyj jej int activity java class jako:

et.setBackgroundResource(R.color.white);

2.

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));
Hamad
źródło
2

Jeśli chcesz obsługiwać wszystkie wersje: Spróbuj tego:

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 
Mladen Rakonjac
źródło
1

Jut use

ArrayAdapter<String> adaptername = new ArrayAdapter<String>(this,
            android.R.layout.simple_dropdown_item_1line, your array list);
Pavan Anadkat
źródło
-10

możesz użyć android:textColor= "dowolnego koloru tekstu, jaki chcesz nadać ”w pliku xml, w którym jest zadeklarowany widok tekstu.

Richa
źródło
Programowo ... nie xml
aLL