Як мати прозорий 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>

Це те, що я намагався отримати прозорий ImageButton, щоб розмістити ці кнопки на SurfaceView. Але Eclipse, дає мені помилку в проекті, як тільки я включаю прозору лінію в xml.

Будь ласка, допоможіть.


3
лише бічна примітка: замість власного прозорого зображення ви можете також просто використовувати @android: color / transparent - немає необхідності у власному власному прозорому зображенні
Mathias Conradt

6
Зауважте, що надаючи кнопці зображення прозорий фон, ви видаляєте візуальний відгук про стан, що натиснув кнопку (і, можливо, вимкнено). Це призводить до незначного зниження зручності використання.
szeryf

Для того, щоб переконатися, що ImageButton насправді розміщується на SurfaceView, також корисно зателефонувати за попереднімButton.bringToFront (), інакше він все ще може бути схований за SurfaceView
Jay Snayder

API Android забезпечує правильний атрибут для створення прозорого фону, не втрачаючи візуального зворотного зв’язку для натиснутої кнопки або для інших станів! Прочитайте мою відповідь нижче!
lory105

Відповіді:


984

Спробуйте використовувати null для фону ...

android:background="@null"

Дякую. Це працює. Видно лише зображення, а не коробку навколо нього. Але чи можу я закласти цю кнопку над SurfacaView, тобто над попереднім переглядом відео? Чи можливо це? Як це зробити?
Намрата

1
@Namratha Це SurfaceViewповинно дозволяти запускати кнопки над поверхнею, але зауважте: "Це можна використовувати для розміщення накладок, таких як кнопки вгорі поверхні, хоча зауважте, що це може вплинути на продуктивність, оскільки повна змішана альфа композит буде виконуватися щоразу, коли поверхня змінюється. " від developer.android.com/reference/android/view/SurfaceView.html
Квінтін Робінсон

57
Неправильно використовувати нульовий фон !! API Android забезпечує правильний атрибут для створення прозорого фону, не втрачаючи візуального зворотного зв’язку для натиснутої кнопки або для інших станів! Прочитайте мою відповідь нижче!
lory105

1
Як встановити фон кнопки на нуль - це не дуже гарна ідея, як згадувалося вище та нижче. Відповіді за допомогою відповідних атрибутів набагато краще, або створити правильний вибір з прозорим для не натискання та відповідним зворотним зв'язком при натисканні на нього.
Даміян Вальчак

Це дало мені помилку. Але це працювало для мене android: background = "@ android: color / transparent"
Хуан Мендес

303

НЕ ВИКОРИСТОВУЙТЕ ПЕРЕПАСЕНТНИЙ АБО НУЛЬНИЙ РОЗВИТОК, оскільки тоді кнопка (або загальний вигляд) більше не виділятиметься при натисканні !!!

У мене була така ж проблема, і нарешті я знайшов правильний атрибут від Android API для вирішення проблеми. Він може застосовуватися до будь-якого виду.

Використовуйте це у специфікаціях кнопок:

android:background="?android:selectableItemBackground"

4
Для цього потрібен API 11 - ви видалите 24% телефонів у дикій природі (станом на січень 2014 року)
Shaun Neal

8
Здається, що, використовуючи бібліотеку підтримки, вимога API> = 11 може бути подолана stackoverflow.com/questions/19714682/…
хтось десь

15
Для ефекту круглої пульсації використовуйтеandroid:background="?android:selectableItemBackgroundBorderless"
Mateus Gondim

7
На щастя, станом на 2019 рік, це видаляє приблизно 0% телефонів у дикій природі.
користувач1032613

140

Ви також можете використовувати прозорий колір:

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

9
@Geykel, @Adam, ви повинні знати, що цей атрибут є досить небезпечним при беззастережному використанні, оскільки він додасть ще один прозорий шар, який витягнеться на екран і може призвести до переростання пікселів та уповільнення вашого застосування. Для того щоб перевірити його, ви можете використовувати Developer option: Show GPU overdrawта побачити різницю між встановленням фону на @nullта @android:color/transparent.
амірлазарович

Це найкраща та найефективніша відповідь. :)
Хуан Мендес

112

Якщо встановити фон таким "@null"чином, щоб кнопка не впливала при натисканні на неї. Це буде кращим вибором.

style="?android:attr/borderlessButtonStyle"

Пізніше я виявив, що використовуючи

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

також є хорошим рішенням. І ви можете успадкувати цей атрибут у власному стилі.


не працював для мене, а другий зробив додаток до аварії. Можливо, я зробив щось не так, але я не знаю, що.
Янніс Дран

5
Потрібен рівень API 11. Джерело
Джейсон Робінсон

2
Це правильна відповідь. Крім того, використовуючи AppCompact, з цією відповіддю ефект пульсацій працює чудово, а в api 19 нормальний натиснутий ефект працює поза коробкою. android: background = "? android: attr / selectableItemBackground" Блискучий!
Raffaeu

Це рішення selectableItemBackgroundмає додаткову перевагу - зробити стан зміни кнопки при натисканні на неї. Інші рішення дозволяють зробити кнопку, яку не можна натискати.
ІгорГанапольський

14

під час виконання, ви можете використовувати наступний код

btn.setBackgroundDrawable(null);

8
btn.setBackgroundColor (Color.TRANSPARENT); Працює на всіх рівнях API
AlBeebe

setBackgroundDrawable - це застаріле використання setbackGroundColor, як було запропоновано вище AlBeebe
bhaskarc

цей метод тепер застарілий
Рей Кідді

11

Я вважаю, що прийнята відповідь повинна бути: android:background="?attr/selectableItemBackground"

Це те саме, що відповідь @ lory105, але для максимальної сумісності використовується бібліотека підтримки ( android:еквівалент доступний лише для API> = 11)


8

Видаліть цей рядок:

android:background="@drawable/transparent">

І у вашому класі занять набір

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

Можна встановити рівень альфа від 0 до 255

o означає прозорий і 255 означає непрозорий.


Але чи дає це можливість кнопці лежати поверх SurfaceView?
Намратха

5
Ця відповідь є помилковою та оманливою, оскільки робить всю кнопку напівпрозорою. Якщо ви бажаєте зробити це з коду, перейдіть до нуля методу setBackground. setAlpha - це не те, що потрібно.
Квінтін Віллісон

Це робить весь погляд прозорим.
Радж

5

Найкращий спосіб - використовувати прозорий колірний код

android:background="#00000000"

використовуйте код кольору # 00000000, щоб зробити будь-яку річ прозорою


4
@android:color/transparentбез твердо кодованих значень.
Фред

1
Ні, слід віддати перевагу посилальним значенням ... але IMO, @Fred, навіть розміщення @android:посилання безпосередньо у макеті вважається значенням з твердим кодом, оскільки якщо ви хочете змінити його, вам потрібно буде шукати в макеті, щоб знайти його. Я б задекларував щось подібне <item name="something">@android:color/transparent</item>і використав своє власне значення в макеті, щоб я міг легко знайти його у своєму файлі resource.xml та змінити його без необхідності пошуку в макеті
Кліфф Бертон

2

Використовуйте ImageView... він має прозорий фон за замовчуванням ...


3
Але це не кнопка
Moesio

2
Ви можете використовувати ImageView як кнопку. У своєму коді Java ви просто скажете ImageView попередній = (ImageView) findViewById (R.id.previous); а потім попередній.setOnClickListener (новий OnClickListener {public void onClick (/ * це відбувається, коли ви торкаєтесь ImageView * /)}); Вуаля!
marienke

2

Я вже щось додав на задній план, тому ця річ працювала для мене:

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

(Android Studio 3.4.1)

EDIT : працює лише на android api рівня 21 і вище. для сумісності використовуйте це замість цього

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

1

Використовуй це:

<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

Встановіть фон ImageButton як @null у 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

Використовуйте "@null" . Це працювало для мене.

<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

Його android:background="@android:color/transparent"

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

0

Це програмно встановлений колір фону як прозорий

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

0

Програмно це можна зробити:

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

Я не прихильник, але це, мабуть, робить усе зображення прозорим, а не лише фон.
Тревор

@threed Я знаю, і саме це ОП задає у своєму питанні "прозорий ImageButton".
Мухаммед Рефаат

1
Ви абсолютно праві, ОП попросив прозору кнопку. Але його приклад говорить про те, що він, можливо, мав намір попросити кнопку з прозорим фоном (наприклад android:background="@drawable/transparent"). Так чи інакше, я просто пропоную можливу причину пониження; Я не кажу, що це виправдано.
Тревор

1
@threed добре, можливо, це було причиною цього, будь-який спасибі.
Мухаммед Рефаат

0

У наборі Backgroundатрибутів XML будь-який кольоровий White(#FFFFFF)відтінок або відтінок. Black(#000000)Якщо ви хочете, щоб прозорість проставила 80 перед фактичним хеш-кодом.

#80000000   

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

Я використовував прозорий pngдля ImageButton, і ImageButtonпрацював.


Це не гарне рішення .. використовуйте правильний атрибут, наданий API Android! Прочитайте моє програмне забезпечення.
lory105

Це призведе до отримання іншого шару, який додасться для перевитрати.
tir38
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.