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

Odpowiedzi:


332

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


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.


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

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


10

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

tv.setBackgroundColor(Color.parseColor("#808080"));

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


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

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


3

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


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

2

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

myTextView.setBackgroundColor(ContextCompat.getColor(this,R.color.mycolor)); 

1

Jut use

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

-10

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


Programowo ... nie xml
aLL
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.