Şeffaf bir ImageButton'a sahip olma: 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>

Bu düğmeleri bir SurfaceView üzerine yerleştirmek için şeffaf bir ImageButton almaya çalıştığım şey bu. Ancak Eclipse, xml'deki saydam çizgiyi ekler eklemez projede bir hata veriyor.

Lütfen yardım et.


3
sadece bir yan not: kendi şeffaf görüntünüz yerine, genellikle sadece andand: color / şeffaf kullanabilirsiniz - kendi özel şeffaf görüntünüze gerek yok
Mathias Conradt

6
Görüntü düğmesine şeffaf bir arka plan vererek düğme tıklatılan (ve muhtemelen devre dışı bırakılmış) durumu için görsel bir geri bildirim kaldırdığınızı lütfen unutmayın. Bu, kullanılabilirliğin hafif bir şekilde azalmasına neden olur.
szeryf

ImageButton'un aslında SurfaceView üzerine yerleştirildiğinden emin olmak için previousButton.bringToFront () öğesini çağırmak da yararlıdır, aksi takdirde hala 13
36'da

Android API, tıklanan düğme veya diğer durumlar için görsel geri bildirimi kaybetmeden şeffaf bir arka plan oluşturmak için doğru özelliği sağlar! Cevabımı aşağıda okuyun!
lory105

Yanıtlar:


984

Arka plan için null değerini kullanmayı deneyin ...

android:background="@null"

Teşekkür ederim. Bu çalışıyor. Etrafındaki kutu değil, sadece görüntü görülür. Ancak bu düğmeyi SurfacaView'ın üzerine, yani video önizlemesinin üzerine koyabilir miyim? Mümkün mü? Nasıl yaparım?
Namratha

1
@Namratha SurfaceViewDüğmelerinizi bir yüzeye yapıştırmanıza izin vermeli, ancak şunları not etmelisiniz: "Bu, yüzeyin üstüne düğmeler gibi bindirmeler yerleştirmek için kullanılabilir, ancak tam bir alfa harmanından bu yana performans üzerinde bir etkisi olabilir. Kompozit, Yüzey her değiştiğinde gerçekleştirilecektir. " from developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson

57
Boş bir arka plan kullanmak doğru değil !! Android API, tıklanan düğme veya diğer durumlar için görsel geri bildirimi kaybetmeden şeffaf bir arka plan oluşturmak için doğru özelliği sağlar! Cevabımı aşağıda okuyun!
lory105

1
Düğme arka planını null değerine ayarlamak, yukarıda ve aşağıda belirtildiği gibi iyi bir fikir değildir. Uygun öznitelikleri kullanmanın yanıtları çok daha iyidir veya tıklandığında tıklanmayan ve uygun geri bildirim için saydam olan doğru seçiciyi oluşturun.
Damian Walczak

Bu bana bir hata verdi .. Ama bu benim için çalıştı android: background = "@ android: renk / şeffaf"
Juan Mendez

303

Düğme (veya genel görünüm) artık tıklandığında vurgulanmayacağından, AÇILAN VEYA BOŞ DÜZEN KULLANMAYIN !

Aynı sorunu yaşadım ve sonunda sorunu çözmek için Android API'den doğru özelliği buldum . Herhangi bir görünüme uygulanabilir.

Düğme özelliklerinde bunu kullanın:

android:background="?android:selectableItemBackground"

4
Bu API 11 gerektirir - vahşi telefonların% 24'ünü ortadan kaldırırsınız (Ocak 2014 itibariyle)
Shaun Neal

8
Destek kütüphanesi kullanılarak API> = 11 gereksiniminin üstesinden gelinebilecek gibi görünüyor stackoverflow.com/questions/19714682/…
Birisi

15
Yuvarlak bir dalgalanma efekti içinandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim

7
Neyse ki 2019 itibariyle, vahşi doğada telefonların yaklaşık% 0'ını ortadan kaldırıyor.
user1032613

140

Saydam bir renk de kullanabilirsiniz:

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

9
@Geykel, @Adam, koşulsuz olarak kullanıldığında bu özelliğin oldukça tehlikeli olduğunu bilmelisiniz, çünkü ekrana çizilecek ve aşırı piksellere neden olabilecek ve uygulamanızı yavaşlatabilecek başka bir şeffaf katman ekleyecektir. Test etmek için, Developer option: Show GPU overdrawve öğelerini arka plan @nullve ile ayarlama arasındaki farkı görebilirsiniz @android:color/transparent.
amirlazarovich

Bu en iyi ve en etkili cevaptır. :)
Juan Mendez

112

Arka planı ayarlamak, "@null"düğmenin tıklandığında hiçbir etkisi olmayacaktır. Bu daha iyi bir seçim olacaktır.

style="?android:attr/borderlessButtonStyle"

Daha sonra kullanarak

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

aynı zamanda iyi bir çözümdür. Ve bu niteliği kendi stilinizde devralabilirsiniz.


benim için işe yaramadı ve ikincisi app çökmesini yaptı. Belki yanlış yaptım ama ne olduğunu bilmiyorum.
Yannis Dran

5
API seviye 11 gerektirir. Kaynak
Jason Robinson

2
Bu doğru cevap. Ayrıca AppCompact kullanarak, bu cevapla dalgalanma etkisi mükemmel çalışır ve api 19'da normal preslenmiş etki kutudan çıkar. android: background = "? android: attr / selectableItemBackground" Harika!
Raffaeu

Bu çözüm, selectableItemBackgroundtıklandığında düğme değiştirme durumlarını yapma avantajına sahiptir. Diğer çözümler düğmenin tıklanabilir görünmemesini sağlar.
IgorGanapolsky

14

çalışma zamanında, aşağıdaki kodu kullanabilirsiniz

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); Tüm API seviyelerinde çalışır
AlBeebe

setBackgroundDrawable kullanım dışı bırakıldı setbackGroundColor yukarıda önerildiği gibi AlBeebe tarafından
bhaskarc

bu yöntem artık kullanımdan kaldırıldı
Ray Kiddy

11

Kabul edilen cevabın şöyle olması gerektiğine inanıyorum: android:background="?attr/selectableItemBackground"

Bu @ lory105'in cevabı ile aynıdır ancak maksimum uyumluluk için destek kütüphanesini kullanır ( android:eşdeğer yalnızca API> = 11 için kullanılabilir)


8

Bu satırı kaldır:

android:background="@drawable/transparent">

Ve aktivite sınıfı setinizde

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

Alfa seviyesini 0 ila 255 arasında ayarlayabilirsiniz.

o şeffaf ve 255 opak anlamına gelir.


Ancak bu, düğmenin SurfaceView'in üstünde yer almasını sağlıyor mu?
Namratha

5
Bu yanıt, tüm düğmeyi yarı opak hale getirdiğinden yanlış ve yanıltıcıdır. Bunu koddan yapmak istiyorsanız, setBackground yöntemine null değerini iletin. SetAlpha ihtiyacınız olan şey değil.
Quintin Willison

Tüm görünümü şeffaf hale getirir.
Raj

5

En iyi yol şeffaf renk kodunu kullanmaktır

android:background="#00000000"

herhangi bir şeyi şeffaf yapmak için # 00000000 renk kodunu kullanın


4
@android:color/transparentsabit kodlanmış değerler olmadan.
Fred

1
Hayır, referans alınan değerler tercih edilmelidir ... ancak IMO, @Fred, @android:doğrudan mizanpaj içine bir referans koymak bile kodlanmış bir değer olarak kabul edilir, çünkü değiştirmek isterseniz hala bulmak için mizanpajda sörf yapmanız gerekir. Bunun gibi bir şey beyan eder <item name="something">@android:color/transparent</item>ve kendi değerimi mizanpajda kullanırım, böylece kolayca resources.xml dosyasında bulabilir ve mizanpajda aramak zorunda kalmadan değiştirebilirim
Cliff Burton

2

Kullan ImageView... varsayılan olarak şeffaf arka plana sahiptir ...


3
Ama bu bir düğme değil
Moesio

2
ImageView'i düğme olarak kullanabilirsiniz. Java kodunuzda ImageView önceki = (ImageView) findViewById (R.id.previous); ve daha önce previous.setOnClickListener (yeni OnClickListener {public void onClick (/ * ImageView * /)} öğesine dokunduğunuzda olur); İşte bu kadar!
marienke

2

Zaten arka plana bir şey ekliyordum, bu şey benim için çalıştı:

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

(Android Studio 3.4.1)

EDIT : sadece android api seviye 21 ve üzeri çalışır. uyumluluk için bunu kullanın

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

1

Bunu kullan:

<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

XML'de ImageButton öğesinin arka planını @null olarak ayarlayın

<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

"@Null" kullanın . Benim için çalıştı.

<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

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

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

0

Bu, programlı olarak arka plan rengini saydam olarak ayarlar

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

0

Programlı olarak şu şekilde yapılabilir:

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

Ben downvoter değilim, ama bu sadece arka planı değil, tüm görüntüyü şeffaf yapıyor gibi görünüyor.
Trevor

@ threed biliyorum, ve tam olarak OP sorgularında soran, "şeffaf bir ImageButton".
Muhammed Refaat

1
Kesinlikle haklısın, OP şeffaf bir düğme istedi. Ancak örneği, şeffaf bir arka plana sahip bir düğme istemesi anlamına gelebileceğini gösteriyor (örn. android:background="@drawable/transparent"). Her iki durumda da, aşağı oy için olası bir neden öneriyorum; Bunun haklı olduğunu söylemiyorum.
Trevor

1
@ threed iyi, bunun nedeni olabilirdi, herhangi bir şekilde teşekkür ederim.
Muhammed Refaat

0

XML set Backgroundözniteliğinizde herhangi bir renk White(#FFFFFF)gölgesine veya gölgeye. Black(#000000)Saydamlık istiyorsanız, gerçek karma kodundan önce 80 koyun.

#80000000   

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

Ben şeffaf kullanılan pngiçin ImageButtonve ImageButtonçalıştı.


Bu iyi bir çözüm değil .. Android API tarafından sağlanan doğru özelliği kullanın! Yazılımımı okuyun.
lory105

Bu, başka bir katmana neden olur ve aşırı çekime eklenir.
tir38
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.