Android TextView: thiết lập màu nền tự động không hoạt động


169

Thiết lập màu nền lập trình của Android TextViewdường như không hoạt động. Tôi đang thiếu thứ gì đó!

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

Tôi cũng có tệp này (colors.xml) trong thư mục res / value của mình

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

[EDIT]: Ngoài ra, việc đặt màu văn bản sẽ khiến TextView biến mất.

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

Câu trả lời:


332

Sử dụng et.setBackgroundResource(R.color.white);


5
API Android thực sự là một cái gì đó, tại sao nó không thể gây ra lỗi?
Tawani

53
Bởi vì nó không phải là một lỗi. setBackgroundColor () lấy màu ở dạng số (ví dụ: 0xFFFF0000 cho màu đỏ). R.color.white cũng là một số.
CommonsWare

6
Ôi! Điều này chắc chắn có thể đã được thực hiện tốt hơn với enums chứ không phải là ints phổ biến. Cảm ơn câu trả lời.
Wojciech Górski

2
Họ thể sử dụng chữ ký loại khác nhau! Một cái gọi là ColorId và cái khác gọi là HexColor hoặc một cái gì đó. Cả hai đều là số nguyên nhưng chúng không cùng loại

1
Rất lạ. Từ tài liệu: Tài nguyên nên tham chiếu đến một đối tượng Drawable hoặc 0 để xóa nền.
Artem

73

Thử cái này:

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

Tôi đồng ý rằng một màu sắc và một tài nguyên có cùng loại, nhưng tôi cũng dành vài giờ để tìm giải pháp này.


2
Tôi không hoàn toàn hiểu nó ngay bây giờ (nhìn qua api doc) nhưng nó hoạt động, vì vậy cảm ơn bạn!
CodeJustin.com

Cảm ơn, bạn đã tiết kiệm cho tôi một vài giờ! Bây giờ tôi đã biết giải pháp, nó có ý nghĩa với tôi nhưng tôi chắc chắn rằng tôi sẽ mất vài giờ để tự mình tìm ra giải pháp này.
FreewheelNat

Cảm ơn. API Android thực sự không trực quan đôi khi.
suDocker

64

Để đặt màu đỏ:

textView.setBackgroundColor(0xfff00000);

Hoặc là

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

textView.setBackgroundResource(R.color.solid_red);

1
Để lặp lại câu trả lời của badMonkey, đây là câu trả lời phổ biến hơn, bạn PHẢI đặt các bit thứ tự cao thành không bằng 0 cho độ trong suốt. Tôi bị bắt mọi lúc bằng cách chỉ định RGB mà không có A. Để đặt nền thành màu xanh thuần khiết, hãy sử dụng 0xff0000ff, không phải 0x0000ff hoặc nó sẽ không hoạt động.
JohnnyLambada

Trong .xml, giá trị của phần tử <color> chỉ hoạt động với 6 chữ số cổ điển: # FF0000
Weapon X

@WeaponX: nó hoạt động tốt với màu trong suốt (8 chữ số).
CoolMind

@Weapn X Hàm này có một số nguyên, 4 byte. 6 chữ số hex là 3 byte.

20

Tôi gặp vấn đề tương tự khi tôi tạo màu số mà không xem xét kênh alpha hàng đầu. I E. mytext.setTextColor(0xFF0000)(nghĩ rằng đây sẽ là màu đỏ). Mặc dù đây là màu đỏ, nó cũng trong suốt it = 0x00FF0000; 100% vì giá trị mờ 100% chính xác là 0xFFFF0000hoặc mytext.setTextcolor(0xFFFF0000).


10

Chỉ 1 dòng mã này đã thay đổi nền lập trình

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

8

Tôi đã gặp tình huống khi dịch vụ web trả về một màu ở định dạng hex như "# CC2233" và tôi muốn đưa màu này vào textView bằng cách sử dụng setBackGroundColor (), vì vậy tôi đã sử dụng lớp Android Color để lấy giá trị int của chuỗi hex và chuyển nó sang chức năng đã đề cập. Tất cả mọi thứ đã làm việc. Đây là ví dụ:

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

PS đã đăng câu trả lời này vì các giải pháp khác không hiệu quả với tôi. Tôi hy vọng điều này sẽ giúp được ai đó :)


5

đây là chi tiết nhỏ

nếu bạn đang hoạt động hãy sử dụng cái này

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

nếu bạn ở trong đoạn sử dụng mã dưới đây

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

nếu bạn đang ở trong bộ chuyển đổi recyclerview, hãy sử dụng mã bên dưới

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

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

4

Dưới đây là các bước để làm điều đó một cách chính xác:

  1. Trước hết, hãy khai báo một phiên bản TextView trong MainActivity.java của bạn như sau:

    TextView mTextView;
  2. Đặt một số văn bản NĂNG ĐỘNG (nếu bạn muốn) như sau:

    mTextView.setText("some_text");
  3. Bây giờ, để đặt màu nền, bạn cần xác định màu của riêng mình trong tệp res-> value-> colors.xml như sau:

    <resources>
        <color name="my_color">#000000</color>
    </resources>
  4. Bây giờ bạn có thể sử dụng màu "my_color" trong tệp java của mình để đặt nền động như sau:

    mTextView.setBackgroundResource(R.color.my_color);


3

Color.parseHexColor("17ee27")đã không làm việc cho tôi, thay vào đó Color.parseColor("17ee27")làm việc hoàn hảo.


2

Hai cách để làm điều đó:

1. tạo màu trong tệp colors.xml như:

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

và sử dụng nó trong lớp java hoạt động như:

et.setBackgroundResource(R.color.white);

2.

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

2

Nếu bạn muốn hỗ trợ tất cả các phiên bản: Hãy thử điều này:

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

1

Sử dụng

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

-10

bạn có thể sử dụng android:textColor= "bất kỳ màu văn bản nào bạn muốn cung cấp "trong tệp xml nơi chế độ xem văn bản của bạn được khai báo.


Lập trình ... không phải xml
aLL
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.