Remover programador de plano de fundo programaticamente no Android

128

Quero remover o drawable de plano de fundo @drawable/bgprogramaticamente. Existe uma maneira de fazer isso?

Atualmente, tenho o seguinte XML no meu layout:

<?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
fonte

Respostas:

316

Tente isto

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

Verifique as funções setBackground na documentação do RelativeLayout

Maragues
fonte
4
Eu recebo este erro: O setBackgroundResource método (int) no tipo de visão não é aplicável para os argumentos (null)
UKDataGeek
2
Caso isso não funcione: verifique se você usou a propriedade background e não o android: src!
Chris Conway
3
setBackgroundDrawable agora está obsoleto. A resposta de @ Suraj abaixo é melhor agora.
Anand Sainath
6
api 16? existe algo para API 8?
User1940676
1
Use setBackgroundResource (0). Respondida por @AdamStelmaszczyk. ,
Zar E Ahmer
70

setBackgroundResource(0)é a melhor opção. A partir da documentação :

Defina o plano de fundo para um determinado recurso. O recurso deve se referir a um objeto Drawable ou 0 para remover o plano de fundo .

Funciona em qualquer lugar, porque é desde a API 1.

setBackgroundfoi adicionado muito mais tarde, na API 16, portanto, não funcionará se o seu minSdkVersionfor menor que 16.

Adam Stelmaszczyk
fonte
2
Obrigado, me salvou totalmente após 4 horas de bater a cabeça. Isso é muito útil no caso de você criar dinamicamente um botão de alternância (escolha de 2 drawables) em um evento onClick, mas precisa de um botão visível para ser exibido antes que seus alternados assumam o controle (porque nada será exibido até que o evento de clique aconteça, por isso, quando você pode usar setBackgroundResource(0)para remover o botão "definir" anterior).
Azurespot
2
Essa deve ser a resposta escolhida, pois é a melhor solução em termos de gerenciamento de memória e suporte ao nível da API.
Gregtczap
47

Isso me ajudou a remover a cor de fundo, espero que ajude alguém. setBackgroundColor(Color.TRANSPARENT)

Suraj Bajaj
fonte
3
Os drawables podem ter preenchimento, portanto, se você remover o plano de fundo, também precisará remover o preenchimento.
Michał Kisiel
1
setBackgroundResource (0) é a melhor opção, pois remove completamente o fundo, reduzindo o excesso.
Milão
4

Tente este código:

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

também este funciona:

imgView.setImageResource(0); 

mas tenha cuidado, este não funciona:

imgView.setImageResource(null); 
Adnan Abdollah Zaki
fonte
4

Eu tento este código no android 4+ :

view.setBackgroundDrawable(0);
Salman666
fonte
O método setBackgroundDrawable (Drawable) no tipo de exibição não é aplicável para os argumentos (int)
Tobrun
2

Melhor desempenho neste método:

imageview.setBackgroundResource(R.drawable.location_light_green);

Usa isto.

Mahmudul
fonte
1

Este trabalho para mim:

yourview.setBackground(null);
lscofield
fonte
0

Use setBackgroundColor(Color.TRANSPARENT)para definir o plano de fundo como transparente ou use setBackgroundColor(0). Aqui Color.TRANSPARENTestá o atributo padrão da classe de cores. Vai funcionar bem.

anand krish
fonte
0

Eu tenho um cenário de caso e tentei todas as respostas de cima, mas sempre uma nova imagem foi criada em cima da antiga. A solução que funcionou para mim é:

imageView.setImageResource(R.drawable.image);
Đorđe Nilović
fonte
0

Além das excelentes respostas, se você deseja conseguir isso via xml, pode adicionar:

android:background="@android:color/transparent

para sua opinião.

Jeel Shah
fonte
0

Primeiro, você deve escrever no layout XML:

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

use-o para mostrá-lo usando Java:

myimage.setVisibility(SHOW); //HIDE
SRam
fonte
O que é isso? Pelo que?
CoolMind