2012-07-24 34 views
11

Tôi có một ImageButton có hình nền có độ trong suốt. Theo mặc định, nút sẽ có nền màu xám, nơi các pixel trong suốt - do chủ đề Holo.Light. Tôi đã thử thiết lập màu nền của nút thành trong suốt thông qua phương thức setBackgroundColor(Color.TRANSPARENT). Điều đó hoạt động tốt và làm những gì tôi cần ngoại trừ bây giờ nút của tôi không còn có màu xanh nhạt khi tập trung/ép và trông khá phẳng (không có viền xung quanh nó, vì vậy nó trông giống như một hình ảnh).Android ImageButton background color

Tôi googled và thấy rằng bạn có thể chỉ định bộ chọn như được giải thích here nhưng điều đó có nghĩa là tôi phải chỉ định hình ảnh cho mỗi trạng thái nút và tôi không muốn làm điều đó. Tôi muốn thừa kế các màu lấy nét/được nhấn từ chủ đề nhưng ghi đè lên nền nút bình thường (khi không được nhấn/lấy nét) thành trong suốt thay vì màu xám. Làm thế nào tôi có thể đạt được điều đó ?? Vui lòng cung cấp ví dụ làm việc vì tôi đã thử nhiều kết hợp khác nhau mà không thành công.

Chỉnh sửa Cảm ơn tất cả vì đã trợ giúp. Tôi đã tìm ra cách để thực hiện công việc này mà không phải tạo lại cùng một hình ảnh với các trạng thái được nhấn mạnh và nhấn cho mỗi nút!

Đây là giải pháp của tôi:

nút My được định nghĩa là:

<ImageButton 
      android:id="@+id/ImageButton05" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/button" /> 

Và XML nền của tôi tập tin (với tựa đề button.xml) được định nghĩa như sau:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_pressed_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_focused="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item android:state_hovered="true"> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_focused_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
    <item> 
     <layer-list> 
      <item android:drawable="@drawable/btn_default_normal_holo_light"></item> 
      <item android:drawable="@drawable/network_wifi"></item> 
     </layer-list> 
    </item> 
</selector> 

Trả lời

1

Tôi muốn thừa hưởng màu sắc tập trung/nhấn từ chủ đề nhưng ghi đè lên nền nút bình thường (khi không nhấn/lấy nét) để trong suốt thay vì gr ey. Làm thế nào tôi có thể đạt được điều đó ??

AFAIK bạn không thể vì các màu được nhấn/lấy nét được tích hợp vào cùng một tài nguyên hình ảnh có chứa nền màu xám.

Nếu bạn muốn giữ nét/nhấn của hệ thống nhưng xóa nền, bạn sẽ phải lấy một bản sao của tài nguyên hình ảnh (có thể tìm thấy trong SDK của bạn tại /sdkroot/platforms/[version]/data/res/drawable-hdpi thay thế [phiên bản] với bất kỳ cấp api nào sau đó. Và nếu needbe thay thế hdpi bằng mật độ khác) và chỉnh sửa nút màu xám từ chúng bằng trình chỉnh sửa ảnh. Sau đó, tạo một bộ chọn tham chiếu đến các hình ảnh đã sửa đổi của bạn và đặt làm hình nền cho nút của bạn.

EDIT: Sau đây là các nút holo mặc định hình ảnh cho tập trung và ép

focused

pressed

+0

hình ảnh không chứa bất kỳ màu xám nào .. chúng rõ ràng khi tôi giải thích – Ayyoudy

+0

tiêu điểm, nhấn có hộp màu xanh đậm thay vì màu xám. xem chỉnh sửa của tôi. Bạn sẽ phải chỉnh sửa bên trong "hộp" trong các hình ảnh trên để lại phía sau chỉ là hiệu ứng ánh sáng phát sáng. Bạn có thể chỉnh sửa câu hỏi của bạn và đăng một trong những tuyên bố xml imagebutton của bạn. Có lẽ tôi hiểu lầm những gì bạn đang cố gắng làm, điều đó sẽ làm cho nó rõ ràng hơn với tôi. – FoamyGuy

3

Bạn có thể đặt một cái gì đó vào một tập tin xml, ví dụ, custom_button.xml và sau đó đặt background="@drawable/custom_button" trong chế độ xem nút.

Vui lòng tham khảo liên kết này là có một ví dụ xml: Standard Android Button with a different color

tôi đã sử dụng nó trong mã của tôi và nó chỉ làm việc theo cách tôi muốn.

tham khảo: Standard Android Button with a different color


được sửa đổi:

Nếu bạn muốn sử dụng Có lẽ bạn nên cố gắng thiết lập một biên giới. Ví dụ (Tham khảo: Android - border for button):

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:startColor="#FFFFFF" 
    android:endColor="#00FF00" 
    android:angle="270" /> 
    <corners android:radius="3dp" /> 
    <stroke android:width="5px" android:color="#000000" /> 
</shape> 

OR, Bạn có thể thử để thiết lập các phong cách/chủ đề cho các nút. (Nhưng nó sẽ nằm trong một tệp riêng biệt) Kiểu/chủ đề chứa thuộc tính màu cho các trạng thái khác nhau của nút chẳng hạn như tập trung/bật/tắt/v.v.

Để thiết lập màu nền/hình ảnh và có hiệu ứng nhấp chuột, Dưới đây là một ví dụ (Tham khảo: How to programmatically setting style attribute in a view)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:state_pressed="true" 
    android:drawable="@drawable/btn_pressed" /> 
    <item 
    android:state_pressed="false" 
    android:drawable="@drawable/btn_normal" /> 
</selector> 

sau đó bạn có thể áp dụng selector này cho một nút bằng cách thiết lập android tài sản: background = "@ drawable/my_button".

+0

Điều đó có nghĩa là tôi phải chỉ định một hình ảnh cho mỗi tiểu bang mà không phải là những gì tôi muốn làm như tôi đã giải thích – Ayyoudy

1

Bạn có thể sử dụng ImageView thay vì ImageButton để giải quyết vấn đề của mình. Vui lòng đặt thuộc tính android: background của ImageView thành màu nền của ảnh gốc.

1

Bạn có thể viết những dòng này trong file xml của bạn:

android:background="@null" 

Nó làm việc cho tôi.

0

nếu u không cần nền màu xám mặc định và u cần ImageButton của bạn có vẻ giống như một biểu tượng mà không có nền chỉ cần sử dụng android: Thuộc tính background và đặt nó vào

@android:color/transparent** 
<ImageButton 
android:id="@+id/ImageButton05" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:background="@android:color/transparent" 
android:background="@drawable/button" /> 

hy vọng rằng giúp ai

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