android TextView: การตั้งค่าสีพื้นหลังไม่ทำงานแบบไดนามิก


169

การตั้งค่าสีพื้นหลังโดยทางโปรแกรมของ android TextViewดูเหมือนว่าจะไม่ทำงาน ฉันทำอะไรบางอย่างหายไป!

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

ฉันยังมีไฟล์นี้ (colors.xml) ในโฟลเดอร์ res / values ​​ของฉัน

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

[แก้ไข]: การตั้งค่าสีข้อความทำให้ TextView หายไป

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

คำตอบ:


332

ใช้ et.setBackgroundResource(R.color.white);


5
Android API เป็นอะไรจริง ๆ ทำไมมันถึงไม่ผิดพลาดล่ะ
Tawani

53
เพราะมันไม่ใช่ข้อผิดพลาด setBackgroundColor () ใช้สีในรูปแบบตัวเลข (เช่น 0xFFFF0000 เป็นสีแดง) R.color.white ก็เป็นตัวเลขเช่นกัน
CommonsWare

6
D'โอ้! นี้สามารถทำได้ดีกว่ากับ enums มากกว่า ints แพร่หลาย ขอบคุณสำหรับคำตอบ.
วอยGórski

2
พวกเขาอาจใช้ลายเซ็นประเภทที่แตกต่างกัน! หนึ่งเรียกว่า ColorId และอีกเรียกว่า HexColor หรืออะไรบางอย่าง ทั้งสองเป็นจำนวนเต็ม แต่ไม่ใช่ชนิด

1
ที่แปลกมาก. จากเอกสาร: ทรัพยากรควรอ้างอิงถึงวัตถุDrawableหรือ 0 เพื่อลบพื้นหลัง
Artem

73

ลองสิ่งนี้:

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

ฉันยอมรับว่าสีและแหล่งข้อมูลมีประเภทเดียวกัน แต่ฉันใช้เวลาสองสามชั่วโมงเพื่อค้นหาวิธีแก้ไขปัญหานี้


2
ฉันไม่เข้าใจเลยตอนนี้ (ดู api doc's) แต่มันใช้งานได้ดีขอบคุณ!
CodeJustin.com

ขอบคุณคุณช่วยฉันสักสองสามชั่วโมง! ตอนนี้ฉันรู้วิธีแก้ปัญหาแล้วมันก็สมเหตุสมผลสำหรับฉัน แต่ฉันแน่ใจว่ามันใช้เวลาสองสามชั่วโมงกว่าจะคิดออกเอง
FreewheelNat

ขอบคุณ บางครั้ง Android API นั้นไม่สามารถเข้าใจได้ง่าย
suDocker

64

วิธีตั้งค่าสีแดง:

textView.setBackgroundColor(0xfff00000);

หรือ

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

textView.setBackgroundResource(R.color.solid_red);

1
เพื่อสะท้อนคำตอบของ badMonkey เนื่องจากนี่เป็นคำตอบที่ได้รับความนิยมมากกว่าคุณต้องตั้งค่าบิตลำดับสูงเป็นศูนย์เพื่อความโปร่งใส ฉันถูกจับได้ตลอดเวลาโดยระบุ RGB โดยไม่ต้อง A หากต้องการตั้งค่าพื้นหลังเป็นสีฟ้าบริสุทธิ์ให้ใช้ 0xff0000ff ไม่ใช่ 0x0000ff มิเช่นนั้นจะไม่ทำงาน
JohnnyLambada

ใน. xml ค่าขององค์ประกอบ <color> ใช้ได้กับเลข 6 หลักแบบคลาสสิกเท่านั้น: # FF0000
Weapon X

@WeaponX: ใช้งานได้ดีกับสีโปร่งใส (ตัวเลข 8 หลัก)
CoolMind

@Weapn X ฟังก์ชั่นใช้จำนวนเต็ม 4 ไบต์ เลขฐานสิบหก 6 หลักคือ 3 ไบต์

20

ฉันมีปัญหาที่คล้ายกันซึ่งฉันกำลังสร้างสีเป็นตัวเลขโดยไม่พิจารณาช่องอัลฟาชั้นนำ กล่าวคือ mytext.setTextColor(0xFF0000)(คิดว่านี่จะเป็นสีแดง) ขณะนี้เป็นสีแดงก็ยังเป็น 100% โปร่งใสit = 0x00FF0000; ถูกต้องคุ้มค่าทึบแสง 100% หรือ0xFFFF0000mytext.setTextcolor(0xFFFF0000)


10

เพียงแค่โค้ด 1 บรรทัดนี้ก็เปลี่ยนพื้นหลังโดยทางโปรแกรม

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

8

ฉันมีสถานการณ์เมื่อบริการเว็บคืนสีในรูปแบบเลขฐานสิบหกเช่น "# CC2233" และฉันต้องการใส่สีนี้ใน textView โดยใช้ setBackGroundColor () ดังนั้นฉันจึงใช้ Android Color class เพื่อรับค่า int ของ hex string และส่งต่อไปยัง ฟังก์ชั่นที่กล่าวถึง ทุกอย่างทำงานได้ นี่คือตัวอย่าง:

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

PS โพสต์คำตอบนี้เพราะโซลูชันอื่นไม่ได้ผลสำหรับฉัน ฉันหวังว่านี่จะช่วยให้ใครบางคน :)


5

นี่คือรายละเอียดเล็กน้อย

ถ้าคุณอยู่ในกิจกรรมใช้สิ่งนี้

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

หากคุณอยู่ในส่วนการใช้งานด้านล่างรหัส

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

ถ้าคุณอยู่ในอะแดปเตอร์ recyclerview ใช้รหัสด้านล่าง

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

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

4

นี่คือขั้นตอนในการทำอย่างถูกต้อง:

  1. ก่อนอื่นให้ประกาศตัวอย่างของ TextView ใน MainActivity.java ดังนี้:

    TextView mTextView;
  2. ตั้งค่าข้อความ DYNAMICALLY (หากคุณต้องการ) ดังนี้:

    mTextView.setText("some_text");
  3. ในการตั้งค่าสีพื้นหลังคุณต้องกำหนดสีของคุณเองในไฟล์ res-> values-> colors.xml ดังนี้:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. ตอนนี้คุณสามารถใช้สี "my_color" ในไฟล์ java ของคุณเพื่อตั้งค่าพื้นหลังแบบไดนามิกดังนี้:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")ไม่ได้ผลสำหรับฉันแทนที่จะColor.parseColor("17ee27")ทำงานได้อย่างสมบูรณ์แบบ


2

สองวิธีในการทำเช่นนี้:

1. สร้างสีในไฟล์ colors.xml เช่น:

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

และใช้คลาสจาวากิจกรรม int เป็น:

et.setBackgroundResource(R.color.white);

2

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

2

หากคุณต้องการรองรับทุกรุ่น: ลองทำสิ่งนี้:

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


-10

คุณสามารถใช้android:textColor= "สีข้อความอะไรก็ได้ที่คุณต้องการให้ "ในไฟล์ xml ที่มุมมองข้อความของคุณถูกประกาศ


Programatically ... ไม่ XML
ได้ทั้งหมด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.