2012-12-12 32 views
28

Tôi muốn biết cách đặt màu nút theo chương trình? Tôi đã được mã hóa như sau nhưng thất bại:android set button background programmatically

Button11.setBackgroundColor(R.color.red); 

Cảm ơn !!

+2

bạn đang cố gắng đạt được hiệu ứng nào? Một hình chữ nhật màu đỏ đơn giản không có hiệu ứng bổ sung? Nếu không, bạn sẽ cần một số loại drawable để đạt được những gì sau của bạn, hoặc là một png (9patch) hoặc một cái gì đó được xác định trong xml. Hệ thống không có cách nào để tạo nút trông giống như nút bình thường ngoại trừ một màu khác. Bạn sẽ phải cung cấp tài nguyên của riêng bạn trừ khi bạn đang tìm kiếm một hình chữ nhật đơn màu đơn giản. – FoamyGuy

+0

thực sự những gì tôi đang làm là trong số 12 nút, chương trình sẽ chọn ngẫu nhiên 6 trong số chúng để điền vào văn bản được xác định. Tôi muốn 6 nút này thay đổi thành màu khác. Về vấn đề này, nó không thể được thực hiện trong phần xml nhưng chỉ được lập trình. Tôi đã xác định một số xml (đầu tiên không được chọn là màu xanh lá cây đồng bằng tròn màu, nếu được lựa chọn tôi muốn nó trở thành màu đỏ tròn đồng bằng) Nếu theo cách này, nó có thể được thực hiện? – pearmak

+2

Phải nhưng bạn cần phải có một hình ảnh nút màu đỏ như một pp 9patch, hoặc bạn sẽ cần phải xác định một hình dạng nút màu đỏ trong xml. Nếu bạn chỉ cần thay đổi màu nền thành màu đỏ, bạn sẽ kết thúc với một hình chữ nhật màu đỏ đơn giản chứ không phải một cái gì đó trông giống như một nút bình thường. – FoamyGuy

Trả lời

60

R.color.red là ID (cũng là int), nhưng không phải là màu.

Sử dụng một trong các cách sau thay vì:

// If you're in an activity: 
Button11.setBackgroundColor(getResources().getColor(R.color.red)); 
// OR, if you're not: 
Button11.setBackgroundColor(Button11.getContext().getResources().getColor(R.color.red)); 

Hoặc cách khác:

Button11.setBackgroundColor(Color.RED); // From android.graphics.Color 

Hoặc, đối với kỹ năng chuyên nghiệp hơn:

Button11.setBackgroundColor(0xFFFF0000); // 0xAARRGGBB 
+0

Làm cách nào để thiết lập các màu khác nhau cho nhiều nút được lập trình? – JUL2791

+2

Nhưng nó xóa tất cả các kiểu, như đường viền hoặc góc bo tròn. Vì vậy, nó đặt màu cho vùng nút trên thực tế, không phải nút màu như OP được yêu cầu. –

+2

Hãy xem xét rằng 'getColor()' không còn được dùng nữa. Sử dụng 'ContextCompat' http://stackoverflow.com/a/32149275/1358777 –

0
button.setBackgroundColor(getResources().getColor(R.color.red); 

Thiết lập màu nền cho chế độ xem này. Tham số: màu sắc của màu nền

R.color.red là một tham chiếu được tạo ra trong quá trình biên dịch trong gen.

26

Chủ đề cũ, nhưng đã học được điều gì đó mới mẻ, hy vọng điều này có thể giúp một người nào đó.

Nếu bạn muốn thay đổi màu nền nhưng giữ nguyên các kiểu khác, thì bên dưới có thể hữu ích.

button.getBackground().setColorFilter(ContextCompat.getColor(this, R.color.colorAccent), PorterDuff.Mode.MULTIPLY); 
+0

' setColorFilter' chỉ đặt màu cho nền hiện tại. Nó không đặt màu nền mới. –

+5

Nếu bạn đang sử dụng nút nâng cao kiểu vật liệu, đây là những gì sẽ hoạt động. Không phải 'Button.setBackgroundColor()'. – fahmy

+1

Đó là 2017 bây giờ và nó vẫn còn sooo xấu xí để viết này toàn bộ bunch của boilerplate để thiết lập màu sắc từ tài nguyên ... –

Các vấn đề liên quan