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

Ответы:


317

Попробуй это

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

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


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

Метод 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.