2010-10-29 34 views
22

Loại bỏ màu nền trong Androidloại bỏ backgroundcolor của một cái nhìn trong android

tôi đã thiết backgroundColor trong mã như thế này,

View.setBackgroundColor(0xFFFF0000); 

Làm thế nào để loại bỏ màu nền này trên một số sự kiện?

+3

Bạn có thể đặt thành màu trong suốt: View.setBackgroundColor (0x00000000); Hoặc android.R.color.transparent – Juhani

+3

chỉ phát hiện ra rằng, một cách khác để đặt nó thành trong suốt sẽ là, View.setBackgroundColor (Color.TRANSPARENT); – sat

+0

Nếu bạn chỉ muốn sử dụng nền của cha mẹ, bạn có thể xóa toàn bộ nền của trẻ bằng: view.setBackgroundResource (0); –

Trả lời

36

Bạn nên cố gắng thiết lập màu nền trong suốt:

view.setBackgroundColor(0x00000000);

+0

Ok, tôi nghĩ rằng sẽ có một cái gì đó để loại bỏ tài sản backgroundcolor. – sat

+1

Vì nó là một int tôi không nghĩ rằng bạn có thể sắp xếp của "null" nó ra, câu trả lời này sẽ làm việc tốt với 0x00AAF890 cũng (hoặc bất kỳ 0x00 ------) kể từ khi hai đầu tiên của thiết lập opacity đến 0% đó là để nói rằng không có màu nền. –

5

View.setBackgroundColor(0); cũng làm việc. Nó không phải là cần thiết để đặt tất cả những số không.

19

Bạn có thể sử dụng

View.setBackgroundColor(Color.TRANSPARENT);

hoặc

View.setBackgroundColor(0);

Hãy nhớ rằng hầu như tất cả mọi thứ có thể nhìn thấy trên màn hình mở rộng Xem, giống như một Button, TextView, ImageView, bất cứ loại nào của Bố cục, v.v ...

+2

Color.TRANSPARENT trông đẹp hơn nhiều so với 0x0000000. Bạn có upvote của tôi! –

1

Tất cả các câu trả lời về việc đặt màu thành trong suốt sẽ hoạt động về mặt kỹ thuật. Nhưng có hai vấn đề với các phương pháp này:

  1. Bạn sẽ kết thúc với overdraw.
  2. Có một cách hay hơn:

Nếu bạn nhìn vào cách View.setBackgroundColor(int color) làm việc bạn sẽ thấy một giải pháp khá đơn giản:

/** 
* Sets the background color for this view. 
* @param color the color of the background 
*/ 
@RemotableViewMethod 
public void setBackgroundColor(@ColorInt int color) { 
    if (mBackground instanceof ColorDrawable) { 
     ((ColorDrawable) mBackground.mutate()).setColor(color); 
     computeOpaqueFlags(); 
     mBackgroundResource = 0; 
    } else { 
     setBackground(new ColorDrawable(color)); 
    } 
} 

Màu int chỉ được chuyển đổi sang một ColorDrawable và sau đó chuyển đến setBackground(Drawable drawable). Vì vậy, giải pháp để xóa màu nền là chỉ cần bỏ trống nền sau với:

myView.setBackground(null); 
+0

Đây là câu trả lời thích hợp. Làm cho nền trong suốt đòi hỏi thời gian xử lý, trong khi _removing background_ thì không. – Sam

+0

setBackground là từ API 16, làm cách nào tôi có thể làm điều đó cho các API thấp hơn? –

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