Удалить фон, который можно рисовать программно в Android

130

Я хочу программно удалить фон, который можно рисовать @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>
Emkey
источник

Ответы:

317

Попробуй это

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

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

Maragues
источник
4
Я получаю эту ошибку: метод setBackgroundResource (int) в типе View неприменим для аргументов (null)
UKDataGeek
2
Если это не сработает: проверьте, использовали ли вы свойство background, а не android: src!
Крис Конвей,
3
setBackgroundDrawable теперь устарел. @ Ответ Сураджа ниже теперь лучше.
Ананд Сайнатх
6
api 16? есть что-нибудь для api 8?
user1940676
1
Используйте setBackgroundResource (0). как ответил @AdamStelmaszczyk. ,
Zar E Ahmer
71

setBackgroundResource(0)лучший вариант. Из документации :

Установите фон для данного ресурса. Ресурс должен ссылаться на объект Drawable или 0 для удаления фона .

Работает везде, потому что начиная с API 1.

setBackgroundбыл добавлен намного позже, в API 16, поэтому он не будет работать, если у вас minSdkVersionменьше 16.

Адам Стельмашчик
источник
2
Спасибо, полностью спас меня после 4 часов головокружения. Это очень полезно в случае, если вы динамически создаете переключаемую кнопку (выбор из 2 чертежей) в событии onClick, но вам нужна видимая кнопка, которая будет отображаться до того, как ваши переключаемые кнопки вступят во владение (потому что ничего не будет отображаться до тех пор, пока не произойдет событие щелчка, поэтому, когда оно делает, вы можете использовать, 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);
Salman666
источник
Метод setBackgroundDrawable (Drawable) в типе View неприменим для аргументов (int)
Тобрун,
2

Лучшая производительность по этому методу:

imageview.setBackgroundResource(R.drawable.location_light_green);

Использовать это.

Mahmudul
источник
1

Эта работа для меня:

yourview.setBackground(null);
lscofield
источник
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
SRAM
источник
Что это? Зачем?
CoolMind