Cómo tener un ImageButton transparente: Android


493
<ImageButton android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/media_skip_backward"
android:background="@drawable/transparent"></ImageButton>

Esto es lo que traté de obtener un ImageButton transparente para colocar esos botones en un SurfaceView. Pero Eclipse, me da un error en el proyecto tan pronto como incluyo la línea transparente en xml.

Por favor ayuda.


3
solo una nota al margen: en lugar de su propia imagen transparente, generalmente también puede usar @android: color / transparent - no necesita su propia imagen transparente personalizada
Mathias Conradt

66
Tenga en cuenta que al darle al botón de imagen un fondo transparente, está eliminando una retroalimentación visual para el estado del botón pulsado (y probablemente deshabilitado). Esto da como resultado una ligera disminución de la usabilidad.
szeryf

Para estar seguro de que ImageButton realmente se coloca sobre SurfaceView, también es útil llamar a previousButton.bringToFront (), de lo contrario, puede estar oculto detrás de SurfaceView
Jay Snayder

¡La API de Android proporciona el atributo correcto para crear un fondo transparente sin perder la retroalimentación visual por hacer clic en el botón o para los otros estados! ¡Lee mi respuesta a continuación!
lory105

Respuestas:


984

Intente usar nulo para el fondo ...

android:background="@null"

Gracias. Esto funciona. Solo se ve la imagen y no la caja que la rodea. Pero, ¿puedo colocar este botón sobre SurfacaView, es decir, sobre la vista previa del video? es posible? ¿Cómo lo hago?
Namratha

1
@Namratha The SurfaceViewdebería permitirle unir los botones sobre una superficie, pero tenga en cuenta: "Esto se puede usar para colocar superposiciones como botones en la parte superior de la Superficie, aunque tenga en cuenta que puede tener un impacto en el rendimiento ya que una mezcla alfa completa compuesto se realizará cada vez que cambie la superficie ". de developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
¡No es correcto usar un fondo nulo! ¡La API de Android proporciona el atributo correcto para crear un fondo transparente sin perder la retroalimentación visual por hacer clic en el botón o para los otros estados! ¡Lee mi respuesta a continuación!
lory105

1
Establecer el fondo del botón como nulo no es una buena idea, como se menciona arriba y abajo. Las respuestas con el uso de los atributos apropiados son mucho mejores, o cree un selector correcto con transparencia para comentarios sin clics y apropiados cuando se hace clic.
Damian Walczak

Eso me dio un error ... Pero esto funcionó para mí android: background = "@ android: color / transparent"
Juan Mendez

303

¡NO USE UN DISEÑO TRANSAPENTE O NULO porque entonces el botón (o la vista genérica) ya no se resaltará al hacer clic!

Tuve el mismo problema y finalmente encontré el atributo correcto de la API de Android para resolver el problema. Se puede aplicar a cualquier vista.

Use esto en las especificaciones del botón:

android:background="?android:selectableItemBackground"

44
Esto requiere API 11: elimina el 24% de los teléfonos en la naturaleza (a partir de enero de 2014)
Shaun Neal

8
Parece que utilizando la biblioteca de soporte, el requisito API> = 11 podría superarse stackoverflow.com/questions/19714682/…
Someone Somewhere

15
Para un efecto de onda redondo, useandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim

77
Afortunadamente, a partir de 2019, esto elimina aproximadamente el 0% de los teléfonos en estado salvaje.
user1032613

140

También puedes usar un color transparente:

android:background="@android:color/transparent"

99
@Geykel, @Adam, debes tener en cuenta que este atributo es bastante peligroso cuando se usa incondicionalmente, ya que agregará otra capa transparente que se dibujará en la pantalla y podría provocar píxeles sobregrabados y ralentizar tu aplicación. Para probarlo, puede usar Developer option: Show GPU overdrawy ver la diferencia entre configurar un fondo en @nully @android:color/transparent.
amirlazarovich

Esta es la mejor y más efectiva respuesta. :)
Juan Mendez

112

Establecer el fondo en "@null"hará que el botón no tenga efecto al hacer clic. Esta será una mejor opción.

style="?android:attr/borderlessButtonStyle"

Más tarde descubrí que usando

android:background="?android:attr/selectableItemBackground"

También es una buena solución. Y puede heredar este atributo en su propio estilo.


no funcionó para mí y el segundo hizo que la aplicación se bloqueara. Quizás hice algo mal pero no sé qué.
Yannis Dran

55
Requiere API nivel 11. Fuente
Jason Robinson

2
Esta es la respuesta correcta. También usando AppCompact, con esta respuesta el efecto dominó funciona perfectamente y en la API 19 el efecto normal presionado funciona de fábrica. android: background = "? android: attr / selectableItemBackground" ¡Brillante!
Raffaeu

Esta solución selectableItemBackgroundtiene un beneficio adicional de hacer que el botón cambie de estado cuando se hace clic. Las otras soluciones hacen que el botón parezca no cliqueable.
IgorGanapolsky

14

en tiempo de ejecución, puede usar el siguiente código

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); Funciona en todos los niveles API
AlBeebe

setBackgroundDrawable está en desuso, use setbackGroundColor como lo sugiere AlBeebe
bhaskarc

este método ahora está en desuso
Ray Kiddy

11

Creo que la respuesta aceptada debería ser: android:background="?attr/selectableItemBackground"

Esto es lo mismo que la respuesta de @ lory105 pero usa la biblioteca de soporte para una compatibilidad máxima (el android:equivalente solo está disponible para API> = 11)


8

Eliminar esta línea:

android:background="@drawable/transparent">

Y en tu conjunto de clases de actividad

ImageButton btn = (ImageButton)findViewById(R.id.previous);
btn.setAlpha(100);

Puede establecer el nivel alfa 0 a 255

o significa transparente y 255 significa opaco.


¿Pero esto permite que el botón se encuentre en la parte superior de SurfaceView?
Namratha

55
Esta respuesta es incorrecta y engañosa, ya que hace que todo el botón sea semi opaco. Si desea hacer esto desde el código, pase nulo al método setBackground. setAlpha no es lo que necesitas.
Quintin Willison

Hace que toda la vista sea transparente.
Raj

5

La mejor manera es usar el código de color transparente.

android:background="#00000000"

use el código de color # 00000000 para hacer que cualquier cosa sea transparente


44
@android:color/transparentsin valores codificados.
Fred

1
No, se deben preferir los valores referenciados ... pero IMO, @Fred, incluso poner una @android:referencia directamente en el diseño se considera un valor codificado, ya que si desea cambiarlo todavía tiene que navegar en el diseño para encontrarlo. Declararía algo como esto <item name="something">@android:color/transparent</item>y usaría mi propio valor en el diseño para poder encontrarlo fácilmente en mi archivo resources.xml y cambiarlo sin tener que buscarlo en el diseño
Cliff Burton

2

Usar ImageView... tiene fondo transparente por defecto ...


3
Pero no es un botón
Moesio

2
Puede usar un ImageView como botón. En su código java simplemente dice ImageView previous = (ImageView) findViewById (R.id.previous); y luego previous.setOnClickListener (nuevo OnClickListener {public void onClick (/ * esto sucede cuando toca ImageView * /)}); Voila!
marienke

2

Ya estaba agregando algo al fondo, así que esto me funcionó:

   android:backgroundTint="@android:color/transparent"

(Android Studio 3.4.1)

EDITAR : solo funciona en Android api nivel 21 y superior. por compatibilidad, use esto en su lugar

   android:background="@android:color/transparent"

1

Utilizar este:

<ImageButton
 android:id="@+id/back"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:background="@null"
 android:padding="10dp"
 android:src="@drawable/backbtn" />

1

Establecer el fondo del ImageButton como @null en XML

<ImageButton android:id="@+id/previous"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/media_skip_backward"
android:background="@null"></ImageButton>

1

Use "@null" . Funcionó para mi.

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:srcCompat="@drawable/bkash"
    android:id="@+id/bid1"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:background="@null" />

1

Sus android:background="@android:color/transparent"

<ImageButton
    android:id="@+id/imageButton"
    android:src="@android:drawable/ic_menu_delete"
    android:background="@android:color/transparent"
/>

0

Este es el color de fondo programado como transparente

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);

0

Programáticamente se puede hacer por:

image_button.setAlpha(0f) // to make it full transparent
image_button.setAlpha(0.5f) // to make it half transparent
image_button.setAlpha(0.6f) // to make it (40%) transparent
image_button.setAlpha(1f) // to make it opaque

No soy el votante, pero esto parece hacer que toda la imagen sea transparente, no solo el fondo.
Trevor

@threed, lo sé, y ese es exactamente el OP que pregunta en sus preguntas, "un ImageButton transparente".
Muhammed Refaat

1
Tienes toda la razón, el OP solicitó un botón transparente. Pero su ejemplo sugiere que podría haber querido pedir un botón con un fondo transparente (por ejemplo android:background="@drawable/transparent"). De cualquier manera, solo estoy sugiriendo una posible razón para el voto negativo; No digo que esté justificado.
Trevor

1
@threed bien, puede ser que esa fue la razón, gracias de cualquier manera.
Muhammed Refaat

0

En su Backgroundatributo de conjunto XML para cualquier White(#FFFFFF)tono de color o sombra Black(#000000). Si desea transparencia, simplemente ponga 80 antes del código hash real.

#80000000   

-2
<ImageButton
    android:id="@+id/previous"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/media_skip_backward">
</ImageButton>

Usé un transparente pngpara el ImageButton, y ImageButtonfuncionó.


Esta no es una buena solución ... ¡use el atributo correcto proporcionado por la API de Android! Lee mi answare.
lory105

Esto dará como resultado otra capa, que se sumará al sobregiro.
tir38
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.