Come avere un ImageButton trasparente: 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>

Questo è quello che ho cercato di ottenere un ImageButton trasparente in modo da posizionare quei pulsanti su un SurfaceView. Ma Eclipse mi dà un errore nel progetto non appena includo la linea trasparente in xml.

Per favore aiuto.


3
solo una nota a margine: invece della tua immagine trasparente, in genere potresti anche usare @android: color / transparent - non c'è bisogno della tua immagine trasparente personalizzata
Mathias Conradt

6
Si noti che dando uno sfondo trasparente al pulsante immagine, si rimuove un feedback visivo per lo stato del pulsante (e probabilmente disabilitato). Ciò si traduce in una leggera diminuzione dell'usabilità.
szeryf,

Per essere sicuro che ImageButton venga effettivamente posizionato su SurfaceView, è anche utile chiamare previousButton.bringToFront (), altrimenti potrebbe essere ancora nascosto dietro SurfaceView
Jay Snayder

L'API Android fornisce l'attributo corretto per creare uno sfondo trasparente senza perdere il feedback visivo per il clic sui pulsanti o per gli altri stati! Leggi la mia risposta qui sotto!
lory105,

Risposte:


984

Prova a utilizzare null per lo sfondo ...

android:background="@null"

Grazie. Questo funziona Viene visualizzata solo l'immagine e non la casella attorno ad essa. Ma posso posizionare questo pulsante su SurfacaView, ovvero sull'anteprima del video? È possibile? Come lo faccio?
Namratha,

1
@Namratha SurfaceViewDovresti permetterti di far passare i tuoi pulsanti su una superficie, ma nota: "Questo può essere usato per posizionare sovrapposizioni come pulsanti sopra la superficie, sebbene noti che può avere un impatto sulle prestazioni poiché una fusione alfa completa il composito verrà eseguito ogni volta che la superficie cambia. " da developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
Non è corretto usare uno sfondo nullo !! L'API Android fornisce l'attributo corretto per creare uno sfondo trasparente senza perdere il feedback visivo per il clic sui pulsanti o per gli altri stati! Leggi la mia risposta qui sotto!
lory105,

1
Impostare lo sfondo del pulsante su null non è una buona idea, come menzionato sopra e sotto. Risposte con l'utilizzo di attributi appropriati è molto meglio o crea un selettore corretto con trasparente per il feedback senza clic e appropriato quando si fa clic.
Damian Walczak,

Questo mi ha dato un errore .. Ma questo ha funzionato per me android: background = "@ android: color / transparent"
Juan Mendez,

303

NON UTILIZZARE UN LAYOUT TRANSAPENT O NULL perché il pulsante (o la visualizzazione generica) non verrà più evidenziato al clic !!!

Ho avuto lo stesso problema e finalmente ho trovato l'attributo corretto dall'API Android per risolvere il problema. Può applicarsi a qualsiasi vista.

Utilizzare questo nelle specifiche del pulsante:

android:background="?android:selectableItemBackground"

4
Questo richiede API 11: elimini il 24% dei telefoni in natura (a partire da gennaio 2014)
Shaun Neal

8
Sembra che usando la libreria Support, l'API> = 11 potrebbe essere superato stackoverflow.com/questions/19714682/…
Someone Somewhere

15
Per un effetto a android:background="?android:selectableItemBackgroundBorderless"
catena

7
Fortunatamente a partire dal 2019, questo elimina all'incirca lo 0% dei telefoni in natura.
user1032613

140

Puoi anche usare un colore trasparente:

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

9
@Geykel, @Adam, dovresti essere consapevole che questo attributo è abbastanza pericoloso se usato incondizionatamente poiché aggiungerà un altro livello trasparente che verrà disegnato sullo schermo e potrebbe causare pixel sovrastati e rallentare l'applicazione. Per testarlo, puoi usare Developer option: Show GPU overdrawe vedere la differenza tra impostare uno sfondo su @nulle @android:color/transparent.
amirlazarovich,

Questa è la risposta migliore ed efficace. :)
Juan Mendez,

112

Se si imposta lo sfondo su "@null", il pulsante non avrà alcun effetto quando si fa clic. Questa sarà una scelta migliore.

style="?android:attr/borderlessButtonStyle"

Più tardi ho scoperto che usando

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

è anche una buona soluzione. E puoi ereditare questo attributo nel tuo stile.


non ha funzionato per me e il secondo ha causato l'arresto anomalo dell'app. Forse ho sbagliato male ma non so cosa.
Yannis Dran,

5
Richiede il livello API 11. Fonte
Jason Robinson,

2
Questa è la risposta corretta Usando anche AppCompact, con questa risposta l'effetto a catena funziona perfettamente e su api 19 il normale effetto premuto funziona immediatamente. android: background = "? android: attr / selectableItemBackground" Fantastico!
Raffaeu,

Questa soluzione di selectableItemBackgroundha un ulteriore vantaggio di rendere gli stati di modifica dei pulsanti quando si fa clic. Le altre soluzioni fanno apparire il pulsante non cliccabile.
IgorGanapolsky,

14

in fase di esecuzione, è possibile utilizzare il seguente codice

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); Funziona su tutti i livelli API
AlBeebe,

setBackgroundDrawable è obsoleto utilizzare setbackGroundColor come suggerito sopra da AlBeebe
bhaskarc

questo metodo è ora deprecato
Ray Kiddy il

11

Credo che la risposta accettata dovrebbe essere: android:background="?attr/selectableItemBackground"

È uguale alla risposta di @lory105 ma utilizza la libreria di supporto per la massima compatibilità (l' android:equivalente è disponibile solo per API> = 11)


8

Rimuovi questa riga:

android:background="@drawable/transparent">

E nel tuo set di classi di attività

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

È possibile impostare il livello alfa da 0 a 255

o significa trasparente e 255 significa opaco.


Ma questo consente al pulsante di trovarsi in cima a SurfaceView?
Namratha,

5
Questa risposta è sbagliata e fuorviante in quanto rende l'intero pulsante semi-opaco. Se desideri farlo dal codice, passa null al metodo setBackground. setAlpha non è ciò di cui hai bisogno.
Quintin Willison,

Rende l'intera vista trasparente.
Raj,

5

Il modo migliore è usare il codice colore trasparente

android:background="#00000000"

usa il codice colore # 00000000 per rendere tutto trasparente


4
@android:color/transparentsenza valori hardcoded.
Fred,

1
No, i valori di riferimento dovrebbero essere preferiti ... ma IMO, @Fred, anche inserendo un @android:riferimento direttamente nel layout è considerato un valore codificato poiché se vuoi cambiarlo devi comunque navigare nel layout per trovarlo. Dichiarerei qualcosa del genere <item name="something">@android:color/transparent</item>e utilizzerei il mio valore nel layout in modo da poterlo trovare facilmente nel mio file resources.xml e modificarlo senza doverlo cercare nel layout
Cliff Burton,

2

Usa ImageView... ha uno sfondo trasparente di default ...


3
Ma non è un pulsante
Moesio

2
È possibile utilizzare un ImageView come pulsante. Nel tuo codice java dici semplicemente ImageView previous = (ImageView) findViewById (R.id.previous); e quindi previous.setOnClickListener (nuovo OnClickListener {public void onClick (/ * questo accade quando si tocca ImageView * /)}); Ecco!
Marienke,

2

Stavo già aggiungendo qualcosa allo sfondo, quindi questa cosa ha funzionato per me:

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

(Android Studio 3.4.1)

EDIT : funziona solo su Android API 21 e versioni successive. per compatibilità, utilizzare questo invece

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

1

Usa questo:

<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

Imposta lo sfondo di ImageButton come @null in 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

Usa "@null" . Ha funzionato per me.

<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

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

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

0

Questo è programmato per impostare il colore di sfondo come trasparente

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

0

A livello di programmazione può essere fatto da:

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

Non sono il downvoter, ma questo sembra rendere l'intera immagine trasparente, non solo lo sfondo.
Trevor,

@threed lo so, e questo è esattamente l'OP che chiede nelle sue domande "un ImageButton trasparente".
Muhammed Refaat,

1
Hai perfettamente ragione, l'OP ha chiesto un pulsante trasparente. Ma il suo esempio suggerisce che avrebbe potuto voler chiedere un pulsante con uno sfondo trasparente (ad es android:background="@drawable/transparent".). Ad ogni modo, sto solo suggerendo una possibile ragione per il downvote; Non sto dicendo che sia giustificato.
Trevor,

1
@quanto bene, potrebbe essere stato questo il motivo, grazie comunque.
Muhammed Refaat,

0

Nel tuo set XML Backgroundattributo a qualsiasi White(#FFFFFF)tonalità di colore o tonalità Black(#000000). Se vuoi la trasparenza basta mettere 80 prima del codice hash effettivo.

#80000000   

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

Ho usato un trasparente pngper il ImageButton, e ha ImageButtonfunzionato.


Questa non è una buona soluzione .. usa l'attributo giusto fornito dall'API Android! Leggi la mia risposta.
lory105,

Ciò si tradurrà in un altro livello, aggiungendo a overdraw.
tir38,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.