Color de fondo de Android ImageButton

Tengo un ImageButton con una imagen de fondo que tiene cierta transparencia. De forma predeterminada, el botón obtiene un fondo gris donde los píxeles de transparencia son – debido al tema Holo.Light. Traté de establecer el color de fondo del botón a transparente a través del setBackgroundColor(Color.TRANSPARENT) . Eso funciona muy bien y hace lo que necesito, excepto ahora mi botón ya no tiene el color azul claro cuando enfocado / presionado y se ve bastante plano (sin bordes a su alrededor, por lo que se ve como una imagen).

I googled y vio que puede asignar selectores como se explica aquí, pero eso significaría que tengo que especificar una imagen por estado de botón y no quiero hacerlo. Quiero heredar los enfoques / colores presionados del tema pero sobrescribir el fondo de botón normal (cuando no se presiona / enfocado) a transparente en lugar de gris. ¿Cómo puedo lograr eso? Proporcione un ejemplo de trabajo, ya que he probado muchas combinaciones diferentes sin éxito.

Editar Gracias a todos por ayudar. Me di cuenta de cómo hacer este trabajo sin tener que volver a crear la misma imagen con los estados enfocado y presionado para cada botón!

Aquí está mi solución:

Mi botón se define como:

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

Y mi archivo XML de fondo (titulado button.xml) se define como sigue:

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

Quiero heredar los enfoques / colores presionados del tema pero sobrescribir el fondo de botón normal (cuando no se presiona / enfocado) a transparente en lugar de gris. ¿Cómo puedo lograr eso?

AFAIK no se puede porque los colores de enfoque / presionado están incorporados en los mismos recursos de imagen que contienen el fondo gris.

Si desea mantener el sistema enfocado / presionado pero elimina el fondo, tendrá que tomar una copia de los recursos de la imagen (que se pueden encontrar en su SDK en /sdkroot/platforms/[version]/data/res/drawable-hdpi reemplazar [versión] con cualquier nivel de api que usted está después.Y si needbe reemplazar hdpi con otra densidad) y editar el botón gris de ellos con un editor de fotos. A continuación, haga un selector que hace referencia a las imágenes modificadas y establecer que como fondo para el botón.

EDIT: Aquí están las imágenes del botón holo predeterminadas para enfocar y presionar

Enfocado

presionado

Puedes poner algo en un archivo xml, por ejemplo, custom_button.xml y luego establecer background="@drawable/custom_button" en la vista del botón.

Por favor, consulte este enlace ya que hay un ejemplo de xml: Standard Android Button con un color diferente

Lo usé en mi código y funcionó de la manera que quería.

Referencia: Android estándar botón con un color diferente


Editado:

Si prefiere usar Quizás debería intentar establecer un borde. Por ejemplo (Referencia: Android – borde para el botón ):

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

O bien, puede intentar establecer el estilo / tema para el botón. (Pero sería en un archivo separado) El estilo / tema contiene los atributos de color para varios estados del botón, como enfocado / habilitado / deshabilitado / etc.

Para establecer el color de fondo / imagen y tener efecto de resaltado de clic, aquí hay un ejemplo (Referencia: Cómo establecer un atributo de estilo mediante programación en una vista )

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

A continuación, puede aplicar este selector a un botón estableciendo la propiedad android: background = "@ drawable / my_button".

Puede utilizar ImageView en lugar de ImageButton para resolver su problema. Establezca la propiedad android: background de ImageView en el color de fondo del padre.

Puede escribir esto en su archivo xml:

 android:background="@null" 

Funcionó para mí.

Si u no necesita el fondo gris por defecto y u necesidad de su ImageButton se parece a un icono sin fondos sólo el uso de android: atributo de fondo y lo puso a

 @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" /> 

Espero que ayude a cualquiera

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.