Làm cách nào để đặt màu văn bản của TextView trong mã?


544

Trong XML, chúng ta có thể đặt màu văn bản theo textColorthuộc tính, như android:textColor="#FF0000". Nhưng làm thế nào để tôi thay đổi nó bằng mã hóa?

Tôi đã thử một cái gì đó như:

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

Trường hợp holderchỉ là một lớp và textlà loại TextView. Màu đỏ là giá trị RGB (# FF0000) được đặt trong chuỗi.

Nhưng nó cho thấy một màu khác chứ không phải màu đỏ. Loại tham số nào chúng ta có thể vượt qua trong setTextColor ()? Trong tài liệu, nó nói int, nhưng nó là một giá trị tham chiếu tài nguyên hoặc bất cứ điều gì khác?


Lưu ý về việc điều chỉnh UI trong mã, vui lòng xem xét các lợi thế của việc nhìn thấy UI trong thời gian thiết kế, giảm thiểu các thay đổi thời gian chạy đến mức tối thiểu.
AlikElzin-kilaka

Câu trả lời:


1245

Bạn nên sử dụng:

holder.text.setTextColor(Color.RED);

Bạn có thể sử dụng các chức năng khác nhau từ Colorlớp học để có được hiệu ứng tương tự của khóa học.

  • Color.parseColor (Thủ công) (như sử dụng LEX)

    text.setTextColor(Color.parseColor("#FFFFFF"));
  • Color.rgbColor.argb( Hướng dẫn sử dụng rgb ) ( Hướng dẫn sử dụng argb ) (như sử dụng Ganapathy)

    holder.text.setTextColor(Color.rgb(200,0,0));
    holder.text.setTextColor(Color.argb(0,200,0,0));
  • Và tất nhiên, nếu bạn muốn xác định màu của mình trong một XMLtệp, bạn có thể làm điều này:

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

    bởi vì getColor()chức năng không được chấp nhận 1 , bạn cần sử dụng nó như vậy:

    ContextCompat.getColor(context, R.color.your_color);
  • Bạn cũng có thể chèn HEX đơn giản, như vậy:

    myTextView.setTextColor(0xAARRGGBB);

    Nơi bạn có kênh alpha trước, sau đó là giá trị màu.

Kiểm tra hướng dẫn đầy đủ của khóa học, Lớp công khai Màu mở rộng Đối tượng .


1 Mã này cũng được sử dụng ở đây:

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

Phương pháp này hiện không được hỗ trợ trong Android M. Tuy nhiên, bạn có thể sử dụng nó từ bối cảnh trong thư viện hỗ trợ , như ví dụ hiện hiển thị.


2
Ngoài ra, nếu văn bản là một liên kết bạn cần sử dụng text.setLinkTextColor (...); trong mã hoặc android: textColorLink = "..." bằng XML
WOUNDEDStevenJones

1
@Nanne Sẽ thật tuyệt nếu câu trả lời của bạn cũng đề cập rằng R.color.XXX là một tham chiếu đến màu sắc. Có nghĩa là nó cần được hủy đăng ký (như trong ví dụ của bạn), cho rõ ràng.
nyaray

Tôi không chắc ý của bạn là gì? Như trong, đã hủy đăng ký và vì vậy sẽ sử dụng nhiều tài nguyên hơn hoặc bạn có ý gì khác?
Nanne

Có cách nào để biết nếu một giá trị màu cụ thể sẽ để cho một văn bản biến mất?
Christopher Masser

6
getColor(int)bị phản đối
RestInPeace

137

Nếu bạn vẫn muốn chỉ định màu của mình trong tệp XML:

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

Sau đó tham chiếu nó trong mã của bạn với một trong hai phương thức sau:

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

hoặc là

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

Đầu tiên có lẽ là tốt hơn nếu bạn đang biên dịch dựa trên Android M, tuy nhiên chủ đề bạn chuyển qua có thể là null, vì vậy có lẽ điều đó dễ dàng hơn cho bạn?

Và nếu bạn đang sử dụng thư viện Compat, bạn có thể làm một cái gì đó như thế này

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

9
Đối với setTextColor, tại sao nó phải lấy getResource (). GetColor () thay vì tham chiếu R.color.errorColor trực tiếp? R.color.x hoạt động cho hầu hết mọi phương thức khác. Vô cùng bực bội!
Dân sự

8
@Civilian: vì int param mà các phương thức setXXXColor () yêu cầu được lấy làm giá trị ARGB thực tế để sử dụng, KHÔNG phải là giá trị để tra cứu trong tệp tài nguyên. Thật kỳ lạ, lớp View có cả setBackgroundColor () và setBackgroundResource (), trong khi TextView thiếu phương thức setTextResource ().
Ian Kemp

1
getColor(int)bị phản đối ContextCompat.getColor(getContext(), R.color.yourColor);dường như là sự thay thế
RestInPeace

45

Và một số khác:

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

1
getResources()là một chức năng thành viên bối cảnh. Đối với bộ điều hợp, sử dụng getContext().getResources(). Các giá trị màu sẽ đi vào tài nguyên, như trong câu trả lời của @ xbakesx.
C0D3LIC1OU5

40

Bạn cũng có thể làm điều này từ một tệp XML.

Tạo một color.xmltệp trong thư mục giá trị:

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

</resources>

Sau đó, trong bất kỳ tệp XML nào, bạn có thể đặt màu cho văn bản bằng cách sử dụng,

android:textColor="@color/textbody"

Hoặc bạn có thể sử dụng màu này trong tệp 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

Bạn có thể dùng

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

Bạn cũng có thể chỉ định màu nào bạn muốn với Độ trong suốt.

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

a cho giá trị Alpha (Trong suốt) r-red g-green b-blue


15

sử dụng đoạn mã sau trong 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

Có nhiều cách khác nhau để đặt màu trên chế độ xem văn bản.

  1. Thêm giá trị màu trong studio res-> value-> colors.xml dưới dạng

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

    Bây giờ đặt màu trong xml hoặc lớp Actvity là

    text.setTextColor(getResources().getColor(R.color.color_purple)
  2. Nếu bạn muốn cung cấp mã màu trực tiếp, hãy sử dụng bên dưới mã Color.parseColor

    textView.setTextColor(Color.parseColor("#ffffff"));   
  3. Bạn cũng có thể sử dụng RGB

    text.setTextColor(Color.rgb(200,0,0));
  4. Sử dụng cũng có thể sử dụng hexcode trực tiếp cho textView. Bạn cũng có thể chèn HEX đơn giản, như vậy:

    text.setTextColor(0xAARRGGBB);
  5. Bạn cũng có thể sử dụng argb với các giá trị alpha.

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

    a cho Alpha (Trong suốt) v.

  6. Và nếu bạn đang sử dụng thư viện Compat, bạn có thể làm một cái gì đó như thế này

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

9

Tôi thường làm điều này cho bất kỳ quan điểm:

myTextView.setTextColor(0xAARRGGBB);

Ở đâu

  • AA định nghĩa alpha (00 cho trong suốt, FF cho mờ)

  • RRGGBB định nghĩa mã màu HTML thông thường (như FF0000 cho màu đỏ).


Và tại sao bỏ phiếu xuống? Bạn có thể thêm một số suy nghĩ về điều này xin vui lòng?
AW

7

Nếu bạn có kế hoạch sử dụng setTextAppparent, bạn nên biết rằng nó sẽ ghi đè lên màu văn bản với kiểu được kế thừa từ chủ đề. Vì vậy, nếu bạn muốn sử dụng cả hai, hãy đặt màu sau đó .

Những công việc này:

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

Trong khi điều này sẽ làm cho màu văn bản của bạn là màu trắng (đối với chủ đề tối) hoặc đen (đối với chủ đề sáng):

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

Trái với điều này trong XML, thứ tự là tùy ý.


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

Trong colors.xmltệp, viết mã dưới đây:

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

6

Tôi tin rằng nếu bạn muốn chỉ định màu làm tài nguyên (trong tệp XML ), bạn sẽ phải cung cấp giá trị ARGB của nó (không chỉ đơn giản là giá trị RGB).

Hãy thử thay đổi giá trị màu sắc của bạn thành #FFFF0000. Nó sẽ cung cấp cho bạn ĐỎ.


theo kinh nghiệm của tôi, điều đó không đúng và có thể sử dụng giá trị RGB thay vì giá trị ARGB
slinden77

6

text.setTextColor(getResource().getColor(R.color.black)) bạn đã tạo màu đen trong color.xml.

HOẶC LÀ

text.setTextColor(Color.parseColor("#000000")) ở đây gõ hexcode mong muốn

HOẶC LÀ

text.setTextColor(Color.BLACK) bạn có thể sử dụng các trường màu tĩnh


5

Sử dụng:

TextView tv = new TextView(this);
tv.setTextColor(Color.rgb(285,0,0));

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

hoặc là

myTextView.setTextColor(0xAARRGGBB);

4

Sử dụng Bộ chuyển đổi, bạn có thể đặt màu văn bản bằng cách sử dụng mã này:

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

Mã trên đang làm việc về phía tôi. Đây textlà một TextView về màu sắc cần thiết để được thiết lập.



2

Từ API 23 trở đi, getResources().getColor()không được chấp nhận.

Sử dụng cái này thay thế:

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


1

Trong Bộ điều hợp, bạn có thể đặt màu văn bản bằng cách sử dụng mã này:

holder.my_text_view = (TextView) convertView.findViewById(R.id.my_text_view);
holder.my_text_view.setTextColor(Color.parseColor("#FFFFFF"));

1

Nếu bạn muốn cung cấp mã màu trực tiếp thì sử dụng

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

hoặc nếu bạn muốn cung cấp mã màu từ thư mục màu thì hãy sử dụng

textView.setTextColor(R.color.white);

mã này textView.setTextColor (R.color.white); không hoạt động. Bạn có thể sử dụng text.setTextColor (getResource (). GetColor (R.color.color_purple) để lấy màu từ color.xml của bạn
Gian Gomen

1

Để đặt màu của TextView, TextView.setTextColor(R.color.YOURCOLOR)không đủ!

Nó phải được sử dụng như thế này -

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

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

HOẶC LÀ

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


0

Tương tự, tôi đã sử dụng color.xml:

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

Để thiết lập TextViewnền như:

textView.setTextColor(R.color.white);

Tôi đã nhận được một màu khác nhau, nhưng khi tôi sử dụng mã dưới đây, tôi đã nhận được màu thực tế.

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

0

Tôi đã làm theo cách này: Tạo một tệp XML, được gọi là Màu sắc trong thư mục res / value.

Màu sắc của tôi:

    <?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>

Để có được màu này từ tệp xml, tôi đã sử dụng mã này: coi nó là TextView và ctx là đối tượng Ngữ cảnh. Tôi không sử dụng nó từ một Hoạt động, mà là BaseAd CHƯƠNG đến ListView. Đó là lý do tại sao tôi đã sử dụng Đối tượng bối cảnh này.

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

Hy vọng nó giúp.


0

Để cung cấp giá trị rgb: text.setTextColor(Color.rgb(200,0,0));
Để phân tích màu từ giá trị hex: text.setTextColor(Color.parseColor("#FFFFFF"));


0

Nếu bạn đang ở trong một bộ chuyển đổi và vẫn muốn sử dụng màu được xác định trong tài nguyên, bạn có thể thử phương pháp sau:

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

0
TextView textresult = (TextView)findViewById(R.id.textView1);
textresult.setTextColor(Color.GREEN);

0

getColor () không được dùng nữa

Vì vậy, hãy thử cách này:

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

0

Tôi đã làm điều này cho TextView trong ViewHolder cho RecyclerView. Tôi không chắc tại sao, nhưng nó không hoạt động với tôi trong khởi tạo 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
}

Nhưng khi tôi chuyển nó sang onBindViewHolder, nó hoạt động tốt.

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

Hy vọng điều này sẽ giúp được ai đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.