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>

Respostas:


316

Tente isto

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

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


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.


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)


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

4

Eu tento este código no android 4+ :

view.setBackgroundDrawable(0);

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.



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.


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

0

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

android:background="@android:color/transparent

para sua opinião.


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

O que é isso? Pelo que?
CoolMind
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.