android TextView: arka plan rengini dinamik olarak ayarlamak işe yaramıyor


169

Bir android'in arka plan rengini programlı olarak ayarlamak TextViewişe yaramıyor gibi görünüyor. Bir şey özlüyorum!

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

Ayrıca res / değerleri klasöründe bu dosya (colors.xml) var

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

[EDIT]: Ayrıca, metin rengini ayarlamak TextView'in kaybolmasına neden olur.

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

Yanıtlar:


333

kullanım et.setBackgroundResource(R.color.white);


5
Android API gerçekten bir şey, neden bir hata alamadı?
Tawani

53
Çünkü bu bir hata değil. setBackgroundColor () sayısal bir renk alır (örneğin, kırmızı için 0xFFFF0000). R.color.white de bir sayıdır.
CommonsWare

6
D'oh! Bu kesinlikle her yerde bulunan ints yerine enums ile daha iyi yapılabilirdi. Cevap için teşekkürler.
Wojciech Górski

2
Bunlar olabilir , farklı tip imzalar kullanıyor! Biri ColorId, diğeri HexColor veya başka bir şey. Her ikisi de tamsayıdır, ancak aynı tür

1
Çok ilginç. Belgelerden: Kaynak , arka planı kaldırmak için bir Çekilebilir nesneye veya 0'a başvurmalıdır.
Artem

73

Bunu dene:

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

Bir rengin ve kaynağın aynı türe sahip olduğunu kabul ediyorum, ancak bu çözümü bulmak için de birkaç saat harcadım.


2
Şu anda tam olarak anlamadım (api doc'lere bakıyorum) ama işe yarıyor, bu yüzden teşekkür ederim!
CodeJustin.com

Teşekkürler, beni birkaç saat kurtardın! Şimdi çözümü bildiğime göre, bana mantıklı geliyor ama eminim ki bunu kendi başıma çözmem birkaç saat alacaktı.
FreewheelNat

Teşekkürler. Android API bazen gerçekten sezgisel değil.
suDocker

64

Kırmızı rengi ayarlamak için:

textView.setBackgroundColor(0xfff00000);

Veya

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

textView.setBackgroundResource(R.color.solid_red);

1
Bu daha popüler cevap verilen badMonkey'in cevabını yinelemek için, şeffaflık için yüksek dereceli bitleri sıfır dışında ayarlamanız GEREKİR. RGB'yi A olmadan belirterek her zaman yakalanırım. Arka planı saf maviye ayarlamak için 0x0000ff değil 0xff0000ff kullanın veya çalışmaz.
JohnnyLambada

.Xml dosyasında bir <color> öğesinin değeri yalnızca klasik 6 basamakla çalışır: # FF0000
Silah X

@WeaponX: saydam renklerle iyi çalışır (8 basamaklı).
CoolMind

@Weapn X İşlev 4 baytlık bir tam sayı alır. 6 onaltılık basamak 3 bayttır.

20

Önde gelen alfa kanalını düşünmeden sayısal bir renk oluştururken benzer bir sorun yaşadım. yani. mytext.setTextColor(0xFF0000)(bunun kırmızı olacağını düşünüyorum). Bu kırmızı renk olsa da% 100 şeffaftır it = 0x00FF0000; . Doğru% 100 opak değeri 0xFFFF0000veya mytext.setTextcolor(0xFFFF0000).


10

Sadece bu 1 satır kod arka planı programlı olarak değiştirdi

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

8

Web hizmeti "# CC2233" gibi hex formatında bir renk döndürdüğümde durum vardı ve ben setBackGroundColor () kullanarak textView bu renk koymak istedim, bu yüzden hex renk int değerini almak için android Color sınıfı kullandım ve belirtilen işlev. Her şey işe yaradı. Bu örnek:

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

PS bu cevabı yayınladı çünkü diğer çözümler benim için çalışmadı. Umarım bu birine yardımcı olur :)


5

burada biraz ayrıntı var,

eğer faaliyette iseniz bunu kullanın

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

eğer parça halinde aşağıdaki kodu kullanın

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

recyclerview adaptördeyseniz aşağıdaki kodu kullanın

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

// use holder.textview if you are in onBindviewholder
//here context is passed from fragment

4

Doğru şekilde yapmak için adımlar şunlardır:

  1. Her şeyden önce, MainActivity.java'nızda TextView örneğini aşağıdaki gibi bildirin:

    TextView mTextView;
  2. Bazı metinleri DYNAMICALLY (isterseniz) aşağıdaki gibi ayarlayın:

    mTextView.setText("some_text");
  3. Şimdi, arka plan rengini ayarlamak için res-> değerleri-> renkler.xml dosyasında kendi renginizi aşağıdaki gibi tanımlamanız gerekir:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Artık arka planı dinamik olarak aşağıdaki gibi ayarlamak için java dosyanızdaki "my_color" rengini kullanabilirsiniz:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")benim için çalışmadı, bunun yerine Color.parseColor("17ee27")mükemmel çalıştı.


2

Bunu yapmanın iki yolu:

1. gibi colors.xml dosyasında renk oluşturun:

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

ve int etkinlik java sınıfını şu şekilde kullanın:

et.setBackgroundResource(R.color.white);

2.

et.setBackgroundColor(getResources().getColor(R.color.white));
                or
et.setBackgroundColor(Color.parseColor("#ffffff"));

2

Tüm sürümleri desteklemek istiyorsanız: Bunu deneyin:

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

1

Jut kullanımı

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

-10

android:textColor= "u vermek istediğiniz metin rengini kullanabilirsiniz "metin görünümünüzün bildirildiği xml dosyasında.


Programlı olarak ... xml değil
aLL
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.