วิธีการตั้งค่าสีข้อความของ TextView ในรหัส?


544

ใน XML เราสามารถตั้งค่าสีข้อความได้ด้วย textColorandroid:textColor="#FF0000"แอตทริบิวต์เช่น แต่ฉันจะเปลี่ยนมันโดยการเข้ารหัสได้อย่างไร

ฉันลองทำสิ่งที่ชอบ:

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

ที่holderเป็นเพียงชั้นเรียนและtextเป็นประเภทTextViewเป็นประเภทRed คือค่า RGB (# FF0000) ที่ตั้งค่าเป็นสตริง

แต่มันแสดงสีที่แตกต่างมากกว่าสีแดง เราสามารถส่งพารามิเตอร์ชนิดใดใน setTextColor () ในเอกสารอธิบายว่าintแต่มันเป็นค่าอ้างอิงทรัพยากรหรือสิ่งอื่นใด?


หมายเหตุเกี่ยวกับการปรับแต่ง UI ในโค้ดโปรดพิจารณาข้อดีของการเห็น UI ในเวลาออกแบบลดการเปลี่ยนแปลงรันไทม์ให้เหลือน้อยที่สุด
AlikElzin-kilaka

คำตอบ:


1245

คุณควรใช้:

holder.text.setTextColor(Color.RED);

คุณสามารถใช้ฟังก์ชั่นต่าง ๆ จาก Colorชั้นเรียนเพื่อให้ได้ผลเหมือนกันแน่นอน

  • Color.parseColor (ด้วยตนเอง) (เช่น LEX ใช้)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbและColor.argb( Manual rgb ) ( Manual argb ) (เช่นการใช้ Ganapathy)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • และแน่นอนถ้าคุณต้องการกำหนดสีของคุณใน XMLไฟล์คุณสามารถทำได้ดังนี้:

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

    เพราะgetColor()ฟังก์ชั่นเลิกใช้1คุณต้องใช้มันเพื่อ:

    ContextCompat.getColor(context, R.color.your_color);
  • คุณยังสามารถแทรก HEX ธรรมดาได้เช่น:

    myTextView.setTextColor(0xAARRGGBB);

    ที่ที่คุณมีช่องอัลฟาก่อนจากนั้นจึงปรับค่าสี

ตรวจสอบคู่มือการใช้งานที่สมบูรณ์ของหลักสูตรคลาสสาธารณะสีขยายวัตถุระดับสาธารณะสีขยายวัตถุ


1รหัสนี้เคยเป็นที่นี่เช่นกัน:

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

วิธีนี้เลิกใช้แล้วใน Android M. คุณสามารถใช้งานได้จากcontextCompat ในไลบรารีการสนับสนุนตามตัวอย่างที่แสดงในขณะนี้


2
นอกจากนี้หากข้อความนั้นเป็นลิงค์คุณต้องใช้ text.setLinkTextColor (... ); ในรหัสหรือ Android: textColorLink = "... " ใน XML
WOUNDEDStevenJones

1
@Nanne มันจะดีถ้าคำตอบของคุณยังกล่าวว่า R.color.XXX เป็นการอ้างอิงถึงสี หมายความว่าจำเป็นต้องยกเลิกการลงทะเบียน (ตามตัวอย่างของคุณ) เพื่อความชัดเจน
nyaray

ฉันไม่แน่ใจว่าคุณหมายถึงอะไร? เช่นเดียวกับที่ถูกอ้างถึงและจะใช้ทรัพยากรมากขึ้นหรือคุณหมายถึงอย่างอื่นหรือไม่?
Nanne

มีวิธีใดที่จะบอกได้ว่าค่าสีที่เฉพาะเจาะจงจะทำให้ข้อความหายไปหรือไม่?
Christopher Masser

6
getColor(int)เลิกใช้แล้ว
RestInPeace

137

หากคุณยังต้องการระบุสีในไฟล์ XML ของคุณ:

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

จากนั้นอ้างอิงในโค้ดของคุณด้วยหนึ่งในสองวิธีต่อไปนี้:

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

หรือ

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

ครั้งแรกน่าจะดีกว่าถ้าคุณรวบรวม Android M แต่ธีมที่คุณส่งอาจเป็นโมฆะดังนั้นอาจเป็นเรื่องง่ายสำหรับคุณ

และถ้าคุณใช้ไลบรารีความเข้ากันได้คุณสามารถทำสิ่งนี้ได้

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

9
สำหรับ setTextColor ทำไมถึงต้องใช้ getResources (). getColor () แทนที่จะใช้การอ้างอิงโดยตรงของ R.color.errorColor R.color.x ใช้ได้กับวิธีอื่นเกือบทุกวิธี น่าผิดหวังอย่างไม่น่าเชื่อ!
พลเรือน

8
@Civilian: เนื่องจาก int param ที่เมธอด setXXXColor () ต้องใช้เป็นค่า ARGB จริงที่จะใช้ไม่ใช่ค่าที่จะค้นหาในไฟล์ทรัพยากร ค่อนข้างแปลกคลาส View มีทั้ง setBackgroundColor () และ setBackgroundResource () ในขณะที่ TextView ไม่มีเมธอด setTextResource ()
Ian Kemp

1
getColor(int)เลิกใช้แล้ว ContextCompat.getColor(getContext(), R.color.yourColor);น่าจะเป็นการทดแทน
RestInPeace

45

และอีกหนึ่ง:

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

1
getResources()เป็นฟังก์ชั่นสมาชิกบริบท getContext().getResources()สำหรับอะแดปเตอร์ใช้ ค่าสีควรเป็นทรัพยากรเช่นในคำตอบของ @ xbakesx
C0D3LIC1OU5

40

คุณสามารถทำได้จากไฟล์ XML เท่านั้น

สร้างcolor.xmlไฟล์ในโฟลเดอร์ค่า:

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

</resources>

จากนั้นในไฟล์ XML ใด ๆ คุณสามารถกำหนดสีสำหรับข้อความโดยใช้

android:textColor="@color/textbody"

หรือคุณสามารถใช้สีนี้ในไฟล์ 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

คุณสามารถใช้ได้

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

นอกจากนี้คุณยังสามารถระบุสีที่คุณต้องการด้วยความโปร่งใส

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

a สำหรับค่าอัลฟ่า (โปร่งใส) r-red g-green b-blue


15

ใช้รหัสต่อไปนี้ใน 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

มีหลายวิธีในการตั้งค่าสีในมุมมองข้อความ

  1. เพิ่มค่าสีใน studio res-> values-> colors.xml เป็น

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

    ตอนนี้ตั้งค่าสีในระดับ XML หรือระดับแรงโน้มถ่วงเป็น

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. หากคุณต้องการให้รหัสสีใช้โดยตรงด้านล่างรหัส Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. คุณยังสามารถใช้ RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. ใช้ยังสามารถใช้ hexcode โดยตรงสำหรับ textView คุณสามารถแทรก HEX แบบธรรมดาได้เช่น:

    text.setTextColor(0xAARRGGBB);
  5. คุณยังสามารถใช้ argb กับค่าอัลฟา

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

    v สำหรับอัลฟ่า (โปร่งใส)

  6. และถ้าคุณใช้ไลบรารีความเข้ากันได้คุณสามารถทำสิ่งนี้ได้

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

9

ปกติฉันทำสิ่งนี้เพื่อดู:

myTextView.setTextColor(0xAARRGGBB);

ที่ไหน

  • AA กำหนด alpha (00 สำหรับโปร่งใส FF สำหรับทึบแสง)

  • RRGGBB กำหนดรหัสสี HTML ปกติ (เช่น FF0000 สำหรับสีแดง)


และทำไมจึงลงคะแนนเสียง? คุณช่วยเพิ่มความคิดในเรื่องนี้ได้ไหม?
AW

7

หากคุณวางแผนที่จะใช้setTextAppearanceคุณควรรู้ว่ามันจะเขียนทับสีข้อความด้วยสไตล์ที่สืบทอดมาจากธีม ดังนั้นหากคุณต้องการที่จะใช้ทั้งสองตั้งค่าสีหลังจากนั้น

งานนี้:

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

ขณะนี้จะทำให้สีข้อความของคุณเป็นสีขาว (สำหรับชุดรูปแบบสีเข้ม) หรือสีดำ (สำหรับชุดรูปแบบสีอ่อน):

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

ตรงกันข้ามกับสิ่งนี้ใน XML คำสั่งนั้นโดยพลการ


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

ในcolors.xmlไฟล์เขียนรหัสด้านล่าง:

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

6

ฉันเชื่อว่าหากคุณต้องการระบุสีเป็นทรัพยากร (ในไฟล์XML ) คุณจะต้องระบุค่าARGB (ไม่ใช่เพียงค่า RGB)

#FFFF0000ลองเปลี่ยนค่าสีของคุณเพื่อ มันควรจะให้คุณแดง


จากประสบการณ์ของฉันมันไม่เป็นความจริงและเป็นไปได้ที่จะใช้ค่า RGB แทนค่า
ARGB

6

text.setTextColor(getResource().getColor(R.color.black)) คุณสร้างสีดำใน color.xml

หรือ

text.setTextColor(Color.parseColor("#000000")) ที่นี่พิมพ์ hexcode ที่ต้องการ

หรือ

text.setTextColor(Color.BLACK) คุณสามารถใช้ฟิลด์สีคงที่




4

การใช้อแด็ปเตอร์คุณสามารถตั้งค่าสีข้อความโดยใช้รหัสนี้:

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

รหัสข้างต้นทำงานบนฝั่งของฉัน นี่textคือTextViewที่ต้องการตั้งค่าสี



2

ตั้งแต่ API 23 เป็นต้นไปgetResources().getColor()เลิกใช้แล้ว

ใช้สิ่งนี้แทน:

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



1

หากคุณต้องการให้รหัสสีโดยตรงให้ใช้

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

หรือถ้าคุณต้องการให้รหัสสีจากโฟลเดอร์สีให้ใช้

textView.setTextColor(R.color.white);

รหัสนี้ textView.setTextColor (R.color.white); ไม่ทำงาน คุณสามารถใช้ text.setTextColor (getResources (). getColor (R.color.color_purple) เพื่อรับสีจาก color.xml ของคุณ
Gian Gomen

1

ในการตั้งค่าสีของ TextView TextView.setTextColor(R.color.YOURCOLOR)นั้นไม่เพียงพอ!

มันจะต้องมีการใช้เช่นนี้ -

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

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

หรือ

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


0

ในทำนองเดียวกันฉันกำลังใช้color.xml:

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

สำหรับการตั้งค่าTextViewพื้นหลังเช่น:

textView.setTextColor(R.color.white);

ฉันได้สีที่ต่างกัน แต่เมื่อฉันใช้โค้ดด้านล่างฉันจะได้สีที่แท้จริง

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

0

ฉันทำวิธีนี้: สร้างไฟล์ XML ที่เรียกว่าสีในโฟลเดอร์ res / values

My Colors.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>

เพื่อให้ได้สีนี้จากไฟล์ xml ฉันได้ใช้รหัสนี้: valor เป็น TextView และ ctx เป็นวัตถุบริบท ฉันไม่ได้ใช้จากกิจกรรม แต่เป็น BaseAdapter กับ ListView นั่นเป็นเหตุผลที่ฉันใช้วัตถุบริบทนี้

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

หวังว่ามันจะช่วย


0

สำหรับการจัดเตรียมค่า rgb: text.setTextColor(Color.rgb(200,0,0));
สำหรับการวิเคราะห์สีจากค่าเลขฐานสิบหก: text.setTextColor(Color.parseColor("#FFFFFF"));


0

หากคุณอยู่ในอะแดปเตอร์และยังต้องการใช้สีที่กำหนดไว้ในแหล่งข้อมูลคุณสามารถลองวิธีต่อไปนี้:

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


0

getColor () ถูก depreceted

ลองด้วยวิธีนี้:

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

0

ฉันทำสิ่งนี้เพื่อ TextView ใน ViewHolder สำหรับ RecyclerView ฉันไม่แน่ใจว่าทำไม แต่ก็ไม่ได้ผลสำหรับฉันในการเริ่มต้น 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
}

แต่เมื่อฉันย้ายมันไปที่ onBindViewHolder มันก็ใช้ได้ดี

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

หวังว่านี่จะช่วยใครซักคน

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