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.


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"

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"

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"

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.


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);

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).


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.


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


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 ...


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"

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" />

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>

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" />

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"
/>

0

Hiermit wird die Hintergrundfarbe programmgesteuert als transparent festgelegt

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

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

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   

-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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.