Pytanie Jak uzyskać przezroczysty ImageButton: Android


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

To właśnie próbowałem uzyskać przezroczysty ImageButton, aby umieścić te przyciski na SurfaceView. Ale Eclipse, daje mi błąd w projekcie, gdy tylko dołączę przezroczystą linię do xml.

Proszę pomóż.


431
2017-08-04 05:15


pochodzenie


tylko jedna uwaga: zamiast własnego przezroczystego obrazu, możesz także po prostu użyć @android: color / transparent - nie potrzebujesz własnego niestandardowego przezroczystego obrazu - Mathias Conradt
Zwróć uwagę, że po kliknięciu przycisku obrazu jako przezroczystego tła usuwasz wizualną informację zwrotną dotyczącą stanu kliknięcia (i prawdopodobnie wyłączenia) przycisku. Powoduje to nieznaczny spadek użyteczności. - szeryf
Aby upewnić się, że ImageButton rzeczywiście zostanie umieszczony na SurfaceView, warto również wywołać previousButton.bringToFront (), w przeciwnym razie może być ukryty za SurfaceView - Jay Snayder
Interfejs API systemu Android zapewnia prawidłowy atrybut, aby utworzyć przezroczyste tło bez utraty wizualnej informacji zwrotnej dla klikniętego przycisku lub dla innych stanów! Przeczytaj moją odpowiedź poniżej! - lory105


Odpowiedzi:


Spróbuj użyć wartości null w tle ...

android:background="@null"

878
2017-08-04 05:17



Dziękuję Ci. To działa. Widoczny jest tylko obraz, a nie pudełko wokół niego. Ale czy mogę umieścić ten przycisk nad SurfacaView, czyli nad podglądem wideo? czy to możliwe? Jak mam to zrobić? - Namratha
@Namratha The SurfaceView Powinieneś pozwolić ci splatać guziki nad powierzchnią, ale pamiętaj: "To może być używane do umieszczania nakładek, takich jak przyciski na powierzchni, ale pamiętaj, że może to mieć wpływ na wydajność, ponieważ cały kompozyt z mieszaniem alfa będzie wykonywane za każdym razem, gdy powierzchnia się zmienia. " od developer.android.com/reference/android/view/SurfaceView.html - Quintin Robinson
Nie powoduje to kliknięcia przycisku. - Yannis Dran
Używanie zerowego tła nie jest poprawne! Interfejs API systemu Android zapewnia prawidłowy atrybut, aby utworzyć przezroczyste tło bez utraty wizualnej informacji zwrotnej dla klikniętego przycisku lub dla innych stanów! Przeczytaj moją odpowiedź poniżej! - lory105
Ustawienie tła przycisku na wartość null nie jest dobrym pomysłem, jak wspomniano powyżej i poniżej. Odpowiedzi przy użyciu odpowiednich atrybutów są o wiele lepsze, lub utwórz prawidłowy selektor z przezroczystym kliknięciem bez kliknięcia i odpowiednią informacją zwrotną po kliknięciu. - Damian Walczak


NIE UŻYWAJ TRANSAKCJONALNEGO LUB NIETYPOWEGO UKŁADU ponieważ wtedy przycisk (lub ogólny widok) nie będzie już bardziej widoczny po kliknięciu !!!

Miałem ten sam problem i nareszcie Znalazłem poprawny atrybut z Android API rozwiązać problem. Może odnosić się do każdego widoku.

Użyj tego w specyfikacji przycisku:

android:background="?android:selectableItemBackground"

248
2017-08-30 15:55



Wymaga to API 11 - eliminujesz 24% telefonów na wolności (stan na styczeń 2014 r.) - Shaun Neal
Wygląda na to, że za pomocą biblioteki Support można przezwyciężyć wymagania API> = 11 stackoverflow.com/questions/19714682/... - Someone Somewhere
Aby uzyskać okrągły efekt marszczyć, użyj android:background="?android:selectableItemBackgroundBorderless" - Mateus Gondim


Możesz również użyć przezroczystego koloru:

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

130
2017-07-09 04:04



@Geykel, @Adam, należy pamiętać, że ten atrybut jest dość niebezpieczny, gdy jest używany bezwarunkowo, ponieważ doda kolejną przezroczystą warstwę, która zostanie narysowana na ekranie i może spowodować przesłonięcie pikseli i spowolnić działanie aplikacji. Aby go przetestować, możesz użyć Developer option: Show GPU overdraw i zobacz różnicę między ustawianiem tła @null i @android:color/transparent. - amirlazarovich
To najlepsza i najskuteczniejsza odpowiedź. :) - Juan Mendez


Ustawianie tła na "@null" sprawi, że przycisk nie będzie działał po kliknięciu. To będzie lepszy wybór.

style="?android:attr/borderlessButtonStyle"

Później znalazłem, że za pomocą

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

jest również dobrym rozwiązaniem. I możesz dziedziczyć ten atrybut w swoim własnym stylu.


104
2018-04-19 03:59



selectableItemBackground nie działało na 2.x - Yura Shinkarev
nie działa dla mnie, a drugi spowodował awarię aplikacji. Być może popełniłem błąd, ale nie wiem co. - Yannis Dran
Wymaga poziomu interfejsu API 11. Źródło - Jason Robinson
To jest poprawna odpowiedź. Również przy użyciu AppCompact, z tą odpowiedzią efekt marszczenia działa idealnie, a na api 19 normalny efekt prasowany działa po wyjęciu z pudełka. android: background = "? android: attr / selectableItemBackground" Genialny! - Raffaeu
To rozwiązanie selectableItemBackground ma dodatkową zaletę polegającą na tym, że po kliknięciu przycisk zmienia stan przycisków. Inne rozwiązania powodują, że przycisk nie jest klikalny. - Igor Ganapolsky


w czasie wykonywania można użyć następującego kodu

btn.setBackgroundDrawable(null);

14
2018-01-18 10:00



btn.setBackgroundColor (Color.TRANSPARENT); Działa na wszystkich poziomach interfejsu API - AlBeebe
setBackgroundDrawable jest przestarzałe, użyj setbackGroundColor, jak zasugerował wyżej AlBeebe - oat
ta metoda jest teraz przestarzała - Ray Kiddy


Uważam, że zaakceptowaną odpowiedzią powinno być: android:background="?attr/selectableItemBackground"

Jest to to samo, co odpowiedź @ lory105, ale używa biblioteki wsparcia dla maksymalnej kompatybilności ( android: odpowiednik jest dostępny tylko dla API> = 11)


8
2018-01-28 23:46



powinna być zaakceptowaną odpowiedzią - skylla


Usuń tę linię:

android:background="@drawable/transparent">

I w ustawionej klasie aktywności

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

Możesz ustawić poziom alfa od 0 do 255

o oznacza przezroczysty, a 255 oznacza nieprzejrzysty.


7
2017-08-04 05:25



Ale czy to pozwala przyciskowi spoczywać na SurfaceView? - Namratha
Najprawdopodobniej powinno działać. Po prostu to sprawdź. - Nishant Shah
Ta odpowiedź jest błędna i myląca, ponieważ powoduje, że cały przycisk jest częściowo nieprzezroczysty. Jeśli chcesz zrobić to z kodu, przekaż wartość null do metody setBackground. setAlpha nie jest tym, czego potrzebujesz. - Quintin Willison
Sprawia, że ​​cały widok jest przejrzysty. - Raj


Najlepszym sposobem jest użycie przezroczystego kodu koloru 

android:background="#00000000"

użyj kodu koloru # 00000000, aby wszystko było przezroczyste


5
2017-10-11 11:26



@android:color/transparent bez zakodowanych wartości. - Fred
tak, oba są w porządku - Ajay Venugopal
Nie, preferowane powinny być wartości z odniesieniami ... ale IMO, @Fred, nawet wprowadzanie @android: Bezpośrednie odniesienie do układu jest traktowane jako wartość zakodowana, ponieważ jeśli chcesz ją zmienić, musisz jeszcze surfować w układzie, aby ją znaleźć. Deklarowałbym coś takiego <item name="something">@android:color/transparent</item> i używaj mojej własnej wartości w układzie, aby móc ją łatwo znaleźć w moim resources.xml plik i zmień go bez konieczności przeszukiwania go w układzie - Cliff Burton


Po prostu użyj tego kodu w swoim .java plik:

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

1
2018-06-01 14:47



To tylko powtórzenie ta istniejąca odpowiedź. - Pang


Ustaw tło ImageButton jako @null w 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
2018-02-14 09:55



@Namratha próbowałeś tego w swoim XML? - Murtuza Khan