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.

Namratha
fuente
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"
Quintin Robinson
fuente
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"
lory105
fuente
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"
Geykel
fuente
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.

jiasli
fuente
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);
Adem
fuente
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)

Sam Stern
fuente
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.

Nishant Shah
fuente
¿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

Ajay Venugopal
fuente
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 ...

Daniel Gomez Rico
fuente
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"
Arsam
fuente
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" />
Akshay Paliwal
fuente
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>
Murtuza Khan
fuente
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" />
abir99
fuente
1

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

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

Este es el color de fondo programado como transparente

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);
Zar E Ahmer
fuente
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
Muhammed Refaat
fuente
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   
Alireza Ghanbarinia
fuente
-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ó.

Kiyoshi
fuente
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