programacion - Color de fondo de Android ImageButton
manual de programacion android pdf (5)
Quiero heredar los colores enfocados / presionados del tema, pero sobrescribo el fondo del botón normal (cuando no está presionado / enfocado) a transparente en lugar de gris. ¿Cómo puedo lograr eso?
AFAIK no puede porque los colores foco / prensado están integrados en los mismos recursos de imagen que contienen el fondo gris.
Si desea mantener el foco / presionar el sistema pero eliminar el fondo, tendrá que tomar una copia de los recursos de la imagen (que puede encontrar en su SDK en /sdkroot/platforms/[version]/data/res/drawable-hdpi
reemplaza [versión] con el nivel de api que quieras. Y si es necesario reemplaza hdpi con otra densidad) y edita el botón gris con un editor de fotos. Luego, haga un selector que haga referencia a sus imágenes modificadas y configúrelo como fondo de su botón.
EDITAR: Aquí están las imágenes predeterminadas de los botones holo para enfocar y presionar
Tengo un ImageButton con una imagen de fondo que tiene cierta transparencia. De forma predeterminada, el botón obtiene un fondo gris donde están los píxeles de transparencia, debido al tema Holo.Light. Intenté configurar el color de fondo del botón como transparente a través del setBackgroundColor(Color.TRANSPARENT)
. Eso funciona bien y hace lo que necesito, excepto que ahora mi botón ya no tiene el color azul claro cuando se enfoca / presiona y se ve bastante plano (sin bordes a su alrededor, por lo que parece una imagen).
Busqué en Google y vi que puede asignar selectores como se explica aquí, pero eso significa que tengo que especificar una imagen por estado de botón y no quiero hacer eso. Quiero heredar los colores enfocados / presionados del tema, pero sobrescribo el fondo del botón normal (cuando no está presionado / 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 ayudarme. ¡Descubrí cómo hacer que esto funcione sin tener que recrear la misma imagen con los estados enfocados y presionados 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 de la siguiente manera:
<?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>
Puede 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 xml: Botón Android estándar con un color diferente
Lo usé en mi código y funcionó de la manera que quería.
Referencia: botón Android estándar con un color diferente
Editado:
Si prefieres usar Quizás deberías 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, podría 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 de botón como enfocado / habilitado / deshabilitado / etc.
Para configurar el color / imagen de fondo y tener un efecto resaltado de clic, aquí hay un ejemplo (Referencia: Cómo configurar el atributo de estilo de configuración de 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 configurando la propiedad android: background = "@ drawable / my_button".
Puede usar ImageView en lugar de ImageButton para resolver su problema. Establezca la propiedad android: background de ImageView en el color de fondo del elemento principal.
Puedes escribir esto en tu archivo xml:
android:background="@null"
Funcionó para mí
si no necesitas el fondo gris predeterminado y necesitas que tu ImageButton parezca un ícono sin ningún fondo, usa el atributo android: background y configúralo para
@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 ayudes a alguien