Cara memiliki ImageButton yang transparan: 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>

Inilah yang saya coba dapatkan ImageButton transparan untuk menempatkan tombol-tombol itu pada SurfaceView. Tapi Eclipse, memberi saya kesalahan dalam proyek segera setelah saya memasukkan garis transparan di xml.

Tolong bantu.

Namratha
sumber
3
hanya catatan tambahan: alih-alih gambar transparan Anda sendiri, Anda umumnya bisa juga menggunakan @android: warna / transparan - tidak perlu untuk gambar transparan kustom Anda sendiri
Mathias Conradt
6
Harap dicatat bahwa dengan memberikan tombol gambar latar belakang transparan, Anda menghapus umpan balik visual untuk keadaan tombol yang diklik (dan mungkin dinonaktifkan). Ini menghasilkan sedikit penurunan kegunaan.
szeryf
Dalam rangka untuk memastikan bahwa ImageButton benar-benar akan ditempatkan pada SurfaceView itu juga berguna untuk memanggil previousButton.bringToFront (), jika tidak mungkin masih tersembunyi di balik SurfaceView yang
Jay Snayder
API Android menyediakan atribut yang benar untuk membuat latar belakang yang transparan tanpa kehilangan umpan balik visual untuk tombol yang diklik atau untuk negara bagian lain! Baca jawaban saya di bawah ini!
lory105

Jawaban:

984

Coba gunakan nol untuk latar belakang ...

android:background="@null"
Quintin Robinson
sumber
Terima kasih. Ini bekerja. Hanya gambar yang dilihat dan bukan kotak di sekitarnya. Tapi bisakah saya meletakkan tombol ini di atas SurfacaView yaitu melalui pratinjau video? Apakah ini mungkin? Bagaimana saya melakukannya?
Namratha
1
@Namratha SurfaceViewSeharusnya memungkinkan Anda untuk blace tombol Anda di atas permukaan tetapi perhatikan: "Ini dapat digunakan untuk menempatkan overlay seperti tombol di atas Permukaan, meskipun bagaimanapun perhatikan bahwa hal itu dapat berdampak pada kinerja sejak alpha-blended penuh komposit akan dilakukan setiap kali perubahan permukaan. " dari developer.android.com/reference/android/view/SurfaceView.html
Quintin Robinson
57
Tidak benar menggunakan latar belakang nol !! API Android menyediakan atribut yang benar untuk membuat latar belakang yang transparan tanpa kehilangan umpan balik visual untuk tombol yang diklik atau untuk negara bagian lain! Baca jawaban saya di bawah ini!
lory105
1
Mengatur latar belakang tombol ke nol bukan ide yang baik, seperti yang disebutkan di atas dan di bawah. Jawaban dengan menggunakan atribut yang sesuai jauh lebih baik, atau membuat pemilih yang benar dengan transparan untuk umpan balik yang tidak diklik dan sesuai ketika diklik.
Damian Walczak
Itu memberi saya kesalahan .. Tapi ini bekerja untuk saya android: background = "@ android: color / transparan"
Juan Mendez
303

JANGAN GUNAKAN TRANSAPEN ATAU LAYOUT NULL karena dengan begitu tombol (atau tampilan umum) tidak akan lagi disorot di klik !!!

Saya memiliki masalah yang sama dan akhirnya saya menemukan atribut yang benar dari Android API untuk menyelesaikan masalah. Itu bisa berlaku untuk tampilan apa pun.

Gunakan ini dalam spesifikasi tombol:

android:background="?android:selectableItemBackground"
lory105
sumber
4
Ini membutuhkan API 11 - Anda menghilangkan 24% ponsel di alam liar (per Jan 2014)
Shaun Neal
8
Tampaknya menggunakan perpustakaan Dukungan, persyaratan API> = 11 mungkin dapat diatasi stackoverflow.com/questions/19714682/…
Seseorang Di Suatu Tempat
15
Untuk efek riak bulat, gunakanandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim
7
Untungnya pada 2019, ini menghilangkan sekitar 0% dari ponsel di alam liar.
user1032613
140

Anda juga dapat menggunakan warna transparan:

android:background="@android:color/transparent"
Geykel
sumber
9
@Geykel, @Adam, Anda harus menyadari bahwa atribut ini cukup berbahaya bila digunakan tanpa syarat karena akan menambah lapisan transparan lain yang akan tertarik ke layar dan mungkin menghasilkan piksel yang terlalu berlebihan dan memperlambat aplikasi Anda. Untuk mengujinya, Anda dapat menggunakan Developer option: Show GPU overdrawdan melihat perbedaan antara pengaturan latar belakang ke @nulldan @android:color/transparent.
amirlazarovich
Ini adalah jawaban terbaik dan paling efektif. :)
Juan Mendez
112

Pengaturan latar belakang "@null"akan membuat tombol tidak berpengaruh ketika diklik. Ini akan menjadi pilihan yang lebih baik.

style="?android:attr/borderlessButtonStyle"

Kemudian saya menemukan itu menggunakan

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

juga merupakan solusi yang bagus. Dan Anda dapat mewarisi atribut ini dengan gaya Anda sendiri.

jiasli
sumber
tidak bekerja untuk saya dan yang kedua membuat aplikasi macet. Mungkin saya salah, tetapi saya tidak tahu apa.
Yannis Dran
5
Membutuhkan API level 11. Sumber
Jason Robinson
2
Ini jawaban yang benar. Juga menggunakan AppCompact, dengan jawaban ini efek riak bekerja dengan sempurna dan pada api 19 efek penekanan normal berfungsi di luar kotak. android: background = "? android: attr / selectableItemBackground" Cemerlang!
Raffaeu
Solusi ini selectableItemBackgroundmemiliki manfaat tambahan untuk membuat status perubahan tombol ketika diklik. Solusi lain membuat tombol tampak tidak dapat diklik.
IgorGanapolsky
14

dalam waktu berjalan, Anda dapat menggunakan kode berikut

btn.setBackgroundDrawable(null);
Adem
sumber
8
btn.setBackgroundColor (Color.TRANSPARENT); Bekerja di semua level API
AlBeebe
setBackgroundDrawable tidak digunakan lagi menggunakan setbackGroundColor seperti yang disarankan di atas oleh AlBeebe
bhaskarc
metode ini sekarang sudah tidak digunakan lagi
Ray Kiddy
11

Saya percaya jawaban yang diterima seharusnya: android:background="?attr/selectableItemBackground"

Ini sama dengan jawaban @ lory105 tetapi menggunakan pustaka dukungan untuk kompatibilitas maksimum (yang android:setara hanya tersedia untuk API> = 11)

Sam Stern
sumber
8

Hapus baris ini:

android:background="@drawable/transparent">

Dan di set kelas aktivitas Anda

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

Anda dapat mengatur tingkat alfa 0 hingga 255

o berarti transparan dan 255 berarti buram.

Nishant Shah
sumber
Tetapi apakah ini memungkinkan tombol untuk berbaring di atas SurfaceView?
Namratha
5
Jawaban ini salah dan menyesatkan karena membuat seluruh tombol semi-buram. Jika ingin melakukan ini dari kode maka berikan nol ke metode setBackground. setAlpha bukan yang Anda butuhkan.
Quintin Willison
Itu membuat seluruh tampilan transparan.
Raj
5

Cara terbaik adalah menggunakan kode warna transparan

android:background="#00000000"

gunakan kode warna # 00000000 untuk menjadikan segala sesuatu transparan

Ajay Venugopal
sumber
4
@android:color/transparenttanpa nilai-nilai hard-coded.
Fred
1
Tidak, nilai yang direferensikan harus lebih disukai ... tetapi IMO, @Fred, bahkan menempatkan @android:referensi langsung di tata letak dianggap sebagai nilai yang dikodekan karena jika Anda ingin mengubahnya, Anda masih harus berselancar di tata letak untuk menemukannya. Saya akan mendeklarasikan sesuatu seperti ini <item name="something">@android:color/transparent</item>dan menggunakan nilai saya sendiri dalam tata letak sehingga saya dapat dengan mudah menemukannya di file resources.xml saya dan mengubahnya tanpa harus mencarinya di tata letak
Cliff Burton
2

Gunakan ImageView... ini memiliki latar belakang transparan secara default ...

Daniel Gomez Rico
sumber
3
Tapi itu bukan tombol
Moesio
2
Anda dapat menggunakan ImageView sebagai tombol. Dalam kode java Anda, Anda hanya mengatakan ImageView sebelumnya = (ImageView) findViewById (R.id.previous); dan kemudian before.setOnClickListener (OnClickListener baru {public void onClick (/ * ini terjadi ketika Anda menyentuh ImageView * /)}); Voila!
marienke
2

Saya sudah menambahkan sesuatu ke latar belakang jadi, Hal ini bekerja untuk saya:

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

(Android Studio 3.4.1)

EDIT : hanya bekerja di Android api level 21 ke atas. untuk kompatibilitas, gunakan ini sebagai gantinya

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

Gunakan ini:

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

Atur latar belakang ImageButton sebagai @null dalam 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>
Murtuza Khan
sumber
1

Gunakan "@null" . Ini berhasil untuk saya.

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

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

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

Ini secara terprogram mengatur warna latar belakang sebagai transparan

 ImageButton btn=(ImageButton)findViewById(R.id.ImageButton01);
 btn.setBackgroundColor(Color.TRANSPARENT);
Zar E Ahmer
sumber
0

Secara pemrograman hal itu dapat dilakukan dengan:

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
sumber
Saya bukan downvoter, tetapi ini tampaknya membuat seluruh gambar transparan, bukan hanya latar belakang.
Trevor
@ada saya tahu, dan itulah persisnya yang ditanyakan OP dalam pertanyaannya, "ImageButton transparan".
Muhammed Refaat
1
Anda memang benar, OP meminta tombol transparan. Tetapi contohnya menunjukkan bahwa ia mungkin bermaksud meminta tombol dengan latar belakang transparan (misalnya android:background="@drawable/transparent"). Either way, saya hanya menyarankan kemungkinan alasan untuk downvote; Saya tidak mengatakan itu dibenarkan.
Trevor
1
@theded well, mungkin itu alasannya, terima kasih.
Muhammed Refaat
0

Di set XML Anda Background atribut untuk setiap warna White(#FFFFFF)teduh atau teduh. Black(#000000)Jika Anda ingin transparansi hanya menempatkan 80 sebelum kode hash yang sebenarnya.

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

Saya menggunakan transparan pnguntuk ImageButton, dan ImageButtonbekerja.

Kiyoshi
sumber
Ini bukan solusi yang baik .. gunakan atribut yang tepat yang disediakan oleh Android API! Baca answare saya.
lory105
Ini akan menghasilkan lapisan lain, menambah penarikan berlebih.
tir38