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.


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"

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"

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"

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.


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

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)


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.


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


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


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"

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

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>

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

1

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

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

0

Ini secara terprogram mengatur warna latar belakang sebagai transparan

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

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

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   

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.