So erhalten Sie einen transparenten ImageButton: 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>

Dies ist, was ich versucht habe, einen transparenten ImageButton zu erhalten, um diese Schaltflächen in einer SurfaceView zu platzieren. Aber Eclipse gibt mir einen Fehler im Projekt, sobald ich die transparente Linie in XML einbinde.

Bitte helfen Sie.

Namratha
quelle
3
Nur eine Randnotiz: Anstelle Ihres eigenen transparenten Bildes können Sie im Allgemeinen auch nur @android verwenden: Farbe / transparent - Sie benötigen kein eigenes transparentes Bild
Mathias Conradt
6
Bitte beachten Sie, dass Sie durch das Anzeigen eines transparenten Hintergrunds für die Bildschaltfläche ein visuelles Feedback für den Status "Klicken auf die Schaltfläche" (und wahrscheinlich deaktiviert) entfernen. Dies führt zu einer leichten Abnahme der Benutzerfreundlichkeit.
Szeryf
Um sicherzugehen, dass der ImageButton tatsächlich auf der SurfaceView platziert wird, ist es auch nützlich, previousButton.bringToFront () aufzurufen, da er sonst möglicherweise noch um
Jay Snayder
Die Android-API bietet das richtige Attribut, um einen transparenten Hintergrund zu erstellen, ohne das visuelle Feedback für das Klicken auf eine Schaltfläche oder für die anderen Zustände zu verlieren! Lesen Sie meine Antwort unten!
Lory105

Antworten:

984

Versuchen Sie, null als Hintergrund zu verwenden ...

android:background="@null"
Quintin Robinson
quelle
Vielen Dank. Das funktioniert. Es wird nur das Bild gesehen und nicht die Box um es herum. Aber kann ich diesen Button über SurfacaView legen, dh über die Videovorschau? Ist das möglich? Wie mache ich es?
Namratha
1
@Namratha Das SurfaceViewsollte es Ihnen ermöglichen, Ihre Schaltflächen über einer Oberfläche zu platzieren, aber beachten Sie: "Dies kann verwendet werden, um Überlagerungen wie Schaltflächen auf der Oberfläche zu platzieren. Beachten Sie jedoch, dass dies die Leistung beeinträchtigen kann, da eine vollständige Alpha-Mischung vorliegt Composite wird jedes Mal ausgeführt, wenn sich die Oberfläche ändert. " von developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson
57
Es ist nicht richtig, einen Null-Hintergrund zu verwenden !! Die Android-API bietet das richtige Attribut, um einen transparenten Hintergrund zu erstellen, ohne das visuelle Feedback für das Klicken auf eine Schaltfläche oder für die anderen Zustände zu verlieren! Lesen Sie meine Antwort unten!
Lory105
1
Das Setzen des Schaltflächenhintergrunds auf Null ist keine gute Idee, wie oben und unten erwähnt. Antworten mit der Verwendung geeigneter Attribute sind viel besser, oder erstellen Sie einen korrekten Selektor mit transparentem, nicht angeklicktem und angemessenem Feedback, wenn Sie darauf klicken.
Damian Walczak
Das gab mir einen Fehler .. Aber das funktionierte für mich android: background = "@ android: color / transparent"
Juan Mendez
303

VERWENDEN SIE KEIN TRANSAPENT ODER NULL LAYOUT, da dann die Schaltfläche (oder die generische Ansicht) beim Klicken nicht mehr hervorgehoben wird !!!

Ich hatte das gleiche Problem und fand schließlich das richtige Attribut von der Android-API , um das Problem zu lösen. Es kann auf jede Ansicht angewendet werden.

Verwenden Sie dies in den Schaltflächenspezifikationen:

android:background="?android:selectableItemBackground"
lory105
quelle
4
Dies erfordert API 11 - Sie eliminieren 24% der Telefone in freier Wildbahn (Stand Januar 2014)
Shaun Neal
8
Es scheint, dass unter Verwendung der Support-Bibliothek die API> = 11-Anforderung möglicherweise überwunden wird. Stackoverflow.com/questions/19714682/…
Jemand irgendwo
15
Verwenden Sie für einen runden Welleneffektandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim
7
Glücklicherweise werden ab 2019 etwa 0% der Telefone in freier Wildbahn eliminiert.
user1032613
140

Sie können auch eine transparente Farbe verwenden:

android:background="@android:color/transparent"
Geykel
quelle
9
@Geykel, @Adam, Sie sollten sich bewusst sein, dass dieses Attribut bei bedingungsloser Verwendung ziemlich gefährlich ist, da es eine weitere transparente Ebene hinzufügt, die auf den Bildschirm gezeichnet wird und zu überzeichneten Pixeln führen und Ihre Anwendung verlangsamen kann. Um es zu testen, können Sie das verwenden Developer option: Show GPU overdrawund den Unterschied zwischen dem Festlegen eines Hintergrunds auf @nullund sehen @android:color/transparent.
Amirlazarovich
Dies ist die beste und effektivste Antwort. :)
Juan Mendez
112

Wenn Sie den Hintergrund auf "@null"einstellen, hat die Schaltfläche beim Klicken keine Auswirkung. Dies wird eine bessere Wahl sein.

style="?android:attr/borderlessButtonStyle"

Später fand ich das mit

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

ist auch eine gute Lösung. Und Sie können dieses Attribut in Ihrem eigenen Stil erben.

jiasli
quelle
hat bei mir nicht funktioniert und der zweite hat die App zum Absturz gebracht. Vielleicht habe ich etwas falsch gemacht, aber ich weiß nicht was.
Yannis Dran
5
Benötigt API Level 11. Quelle
Jason Robinson
2
Dies ist die richtige Antwort. Auch mit AppCompact funktioniert mit dieser Antwort der Ripple-Effekt perfekt und auf API 19 funktioniert der normale Press-Effekt sofort. android: background = "? android: attr / selectableItemBackground" Genial!
Raffaeu
Diese Lösung von selectableItemBackgroundhat den zusätzlichen Vorteil, dass die Schaltfläche beim Klicken den Status ändert. Bei den anderen Lösungen wird die Schaltfläche nicht anklickbar angezeigt.
IgorGanapolsky
14

Zur Laufzeit können Sie folgenden Code verwenden

btn.setBackgroundDrawable(null);
Adem
quelle
8
btn.setBackgroundColor (Color.TRANSPARENT); Funktioniert auf allen API-Ebenen
AlBeebe
setBackgroundDrawable ist veraltet. Verwenden Sie setbackGroundColor, wie oben von AlBeebe vorgeschlagen
bhaskarc
Diese Methode ist jetzt veraltet
Ray Kiddy
11

Ich glaube, die akzeptierte Antwort sollte sein: android:background="?attr/selectableItemBackground"

Dies entspricht der Antwort von @ lory105, verwendet jedoch die Unterstützungsbibliothek für maximale Kompatibilität (das android:Äquivalent ist nur für API> = 11 verfügbar).

Sam Stern
quelle
8

Entfernen Sie diese Zeile:

android:background="@drawable/transparent">

Und in Ihrer Aktivitätsklasse

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

Sie können die Alpha-Stufe 0 bis 255 einstellen

o bedeutet transparent und 255 bedeutet undurchsichtig.

Nishant Shah
quelle
Aber ermöglicht dies, dass die Schaltfläche oben auf der SurfaceView liegt?
Namratha
5
Diese Antwort ist falsch und irreführend, da dadurch die gesamte Schaltfläche halb undurchsichtig wird. Wenn Sie dies aus dem Code heraus tun möchten, übergeben Sie null an die setBackground-Methode. setAlpha ist nicht das, was Sie brauchen.
Quintin Willison
Es macht die gesamte Ansicht transparent.
Raj
5

Am besten verwenden Sie den transparenten Farbcode

android:background="#00000000"

Verwenden Sie den Farbcode # 00000000, um alles transparent zu machen

Ajay Venugopal
quelle
4
@android:color/transparentohne fest codierte Werte.
Fred
1
Nein, referenzierte Werte sollten bevorzugt werden ... aber IMO, @Fred, selbst das @android:direkte Einfügen einer Referenz in das Layout wird als fest codierter Wert angesehen, da Sie, wenn Sie ihn ändern möchten, immer noch im Layout surfen müssen, um ihn zu finden. Ich würde so etwas deklarieren <item name="something">@android:color/transparent</item>und meinen eigenen Wert im Layout verwenden, damit ich ihn leicht in meiner Datei resources.xml finden und ändern kann, ohne ihn im Layout suchen zu müssen
Cliff Burton
2

Verwenden Sie ImageView... es hat standardmäßig einen transparenten Hintergrund ...

Daniel Gomez Rico
quelle
3
Aber es ist kein Knopf
Moesio
2
Sie können eine ImageView als Schaltfläche verwenden. In Ihrem Java-Code sagen Sie einfach ImageView previous = (ImageView) findViewById (R.id.previous); und dann previous.setOnClickListener (neuer OnClickListener {public void onClick (/ * dies geschieht, wenn Sie die ImageView berühren * /)}); Voila!
Marienke
2

Ich habe bereits etwas zum Hintergrund hinzugefügt, also hat dieses Ding für mich funktioniert:

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

(Android Studio 3.4.1)

BEARBEITEN : funktioniert nur auf Android API Level 21 und höher. Verwenden Sie dies aus Kompatibilitätsgründen stattdessen

   android:background="@android:color/transparent"
Arsam
quelle
1

Benutze das:

<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
quelle
1

Legen Sie den Hintergrund des ImageButton in XML als @null fest

<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
quelle
1

Verwenden Sie "@null" . Es hat bei mir funktioniert.

<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
quelle
1

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

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

Hiermit wird die Hintergrundfarbe programmgesteuert als transparent festgelegt

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);
Jawad Zeb
quelle
0

Programmatisch kann dies erfolgen durch:

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
quelle
Ich bin nicht der Downvoter, aber dies scheint das gesamte Bild transparent zu machen, nicht nur den Hintergrund.
Trevor
@threed Ich weiß, und das ist genau das OP, das in seinen Fragen "ein transparenter ImageButton" fragt.
Muhammed Refaat
1
Sie haben absolut Recht, das OP bat um einen transparenten Knopf. Sein Beispiel deutet jedoch darauf hin, dass er möglicherweise nach einer Schaltfläche mit transparentem Hintergrund fragen wollte (z android:background="@drawable/transparent". B. ). In jedem Fall schlage ich nur einen möglichen Grund für die Ablehnung vor. Ich sage nicht, dass es gerechtfertigt ist.
Trevor
1
@threed gut, vielleicht war das der Grund dafür, danke auf jeden Fall.
Muhammed Refaat
0

In Ihrem XML-Set- BackgroundAttribut für einen beliebigen White(#FFFFFF)Farbton oder Farbton. Black(#000000)Wenn Sie Transparenz wünschen, setzen Sie einfach 80 vor den eigentlichen Hash-Code.

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

Ich habe eine transparente pngfür die ImageButtonund die ImageButtongearbeitet.

Kiyoshi
quelle
Dies ist keine gute Lösung. Verwenden Sie das richtige Attribut der Android-API! Lies meine Answare.
Lory105
Dies führt zu einer weiteren Ebene, die zum Überziehen beiträgt.
Tir38