Програмно видаляйте фоновий малюнок в Android


128

Я хочу видалити фон, що малюється, @drawable/bgпрограмно. Чи є спосіб це зробити?

Наразі у моєму макеті є наступний XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/widget29"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/bg">

</RelativeLayout>

Відповіді:


316

Спробуйте це

RelativeLayout relative = (RelativeLayout) findViewById(R.id.widget29);
relative.setBackgroundResource(0);

Перевірте функції setBackground в документації на RelativeLayout


4
Я отримую цю помилку: метод setBackgroundResource (int) у типі View не застосовується для аргументів (null)
UKDataGeek

2
У випадку, якщо це не працює: перевірте, чи використовували ви властивість фону, а не android: src!
Кріс Конвей

3
setBackgroundDrawable тепер застарілий. @ Відповідь Суражу нижче нижче вже краще.
Ананд Сайнаф

6
api 16? є щось для api 8?
користувач1940676

1
Використовуйте setBackgroundResource (0). як Відповів @AdamStelmaszczyk ,
Zar E Ahmer

70

setBackgroundResource(0)- найкращий варіант. З документації :

Встановіть фон для заданого ресурсу. Ресурс повинен посилатися на об'єкт, що малюється, або 0 для видалення фону .

Він працює скрізь, тому що це з API 1.

setBackgroundбуло додано набагато пізніше, в API 16, тому він не працюватиме, якщо ваш minSdkVersionнижчий за 16.


2
Дякую, ви повністю врятували мене після 4 годин удару по голові. Це дуже корисно у випадку, якщо у події onClick динамічно створюється переключена кнопка (вибір 2-х малюнків), але потрібна видима кнопка, яка відображатиметься до того, як ваші перемикаються перейдуть на дію (тому що нічого не відображатиметься, доки не відбудеться подія клацання, тому коли це Ви можете скористатись, setBackgroundResource(0)щоб видалити попередню кнопку "встановити" , яку можна перетягнути).
Azurespot

2
Це має бути обраною відповіддю, оскільки це найкраще рішення як щодо управління пам’яттю, так і для підтримки рівня api.
gregtczap

47

Це допомогло мені видалити колір фону, сподіваюся, що він комусь допомагає. setBackgroundColor(Color.TRANSPARENT)


3
Малюнки можуть мати набивання, тому якщо ви видалите фон, вам також потрібно видалити оббивку.
Michał Kisiel

1
setBackgroundResource (0) є найкращим варіантом, оскільки він повністю видаляє фон, отже, зменшуючи перевитрату.
Мілан

4

Спробуйте цей код:

imgView.setImageResource(android.R.color.transparent); 

також цей працює:

imgView.setImageResource(0); 

але будьте обережні, це не працює:

imgView.setImageResource(null); 

4

Я пробую цей код в android 4+ :

view.setBackgroundDrawable(0);

Метод setBackgroundDrawable (Drawable) у типі View не застосовується для аргументів (int)
Тобрун,

2

Найкращі показники цього методу:

imageview.setBackgroundResource(R.drawable.location_light_green);

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



0

Використовуйте, setBackgroundColor(Color.TRANSPARENT)щоб встановити фон як прозорий або використовувати setBackgroundColor(0). Ось Color.TRANSPARENTатрибут за замовчуванням із класу кольорів. Це буде добре працювати.


0

У мене є сценарій випадку, і я спробував усі відповіді зверху, але завжди новий образ створювався поверх старого. Для мене це рішення:

imageView.setImageResource(R.drawable.image);

0

На додаток до відмінних відповідей, якщо ви хочете досягти цього через xml, ви можете додати:

android:background="@android:color/transparent

на ваш погляд.


0

По-перше, ви повинні написати в макеті XML:

android:visibility="invisible" <!--or set VISIBLE-->

потім використовуйте це, щоб показати це за допомогою Java:

myimage.setVisibility(SHOW); //HIDE

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