Rimuovi programmabile sfondo in modo programmabile in Android


128

Voglio rimuovere @drawable/bgprogrammabile lo sfondo disegnabile . C'è un modo per farlo?

Attualmente, ho il seguente XML nel mio 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>

Risposte:


316

Prova questo

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

Controllare le funzioni setBackground nella documentazione di RelativeLayout


4
Ottengo questo errore: il metodo setBackgroundResource (int) nel tipo View non è applicabile per gli argomenti (null)
UKDataGeek

2
Nel caso in cui non funzioni: controlla se hai usato la proprietà background e non android: src!
Chris Conway,

3
setBackgroundDrawable è ora obsoleto. @ La risposta di Suraj qui sotto è migliore ora.
Anand Sainath,

6
api 16? c'è qualcosa per api 8?
user1940676

1
Usa setBackgroundResource (0). come risposto da @AdamStelmaszczyk. ,
Zar E Ahmer,

70

setBackgroundResource(0)è l'opzione migliore. Dalla documentazione :

Imposta lo sfondo su una data risorsa. La risorsa deve fare riferimento a un oggetto Drawable o 0 per rimuovere lo sfondo .

Funziona ovunque, poiché è dall'API 1.

setBackgroundè stato aggiunto molto più tardi, nell'API 16, quindi non funzionerà se il tuo minSdkVersionè inferiore a 16.


2
Grazie, mi hai salvato del tutto dopo 4 ore di colpi alla testa. Questo è molto utile nel caso in cui si crei dinamicamente un pulsante di attivazione (scelta di 2 drawable) in un evento onClick, ma è necessario un pulsante visibile da mostrare prima che subentrino quelli attivati ​​(perché nulla verrà mostrato fino a quando non si verifica l'evento click, quindi quando sì, puoi usare setBackgroundResource(0)per rimuovere il tuo precedente pulsante "set" disegnabile).
Azurespot

2
Questa dovrebbe essere la risposta scelta perché è la soluzione migliore sia in termini di gestione della memoria che di supporto api.
gregtczap,

47

Questo mi ha aiutato a rimuovere il colore di sfondo, spero che aiuti qualcuno. setBackgroundColor(Color.TRANSPARENT)


3
I drawable possono avere un'imbottitura, quindi se rimuovi lo sfondo, devi rimuovere anche l'imbottitura.
Michał Kisiel,

1
setBackgroundResource (0) è l'opzione migliore perché, quindi, rimuove completamente lo sfondo, riducendo il sovraccarico.
Milano,

4

Prova questo codice:

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

anche questo funziona:

imgView.setImageResource(0); 

ma attenzione, questo non funziona:

imgView.setImageResource(null); 

4

Provo questo codice in Android 4+ :

view.setBackgroundDrawable(0);

Il metodo setBackgroundDrawable (Drawable) nel tipo View non è applicabile per gli argomenti (int)
Tobrun,

2

Le migliori prestazioni con questo metodo:

imageview.setBackgroundResource(R.drawable.location_light_green);

Usa questo.



0

Utilizzare setBackgroundColor(Color.TRANSPARENT)per impostare lo sfondo come trasparente o utilizzare setBackgroundColor(0). Ecco Color.TRANSPARENTl'attributo predefinito dalla classe di colore. Funzionerà benissimo.


0

Ho uno scenario di caso e ho provato tutte le risposte dall'alto, ma sempre una nuova immagine è stata creata sopra quella vecchia. La soluzione che ha funzionato per me è:

imageView.setImageResource(R.drawable.image);

0

Oltre alle risposte eccellenti, se si desidera ottenere ciò tramite XML, è possibile aggiungere:

android:background="@android:color/transparent

a tuo avviso.


0

Innanzitutto, devi scrivere nel layout XML:

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

quindi usalo per mostrarlo usando Java:

myimage.setVisibility(SHOW); //HIDE

Che cos'è? Per che cosa?
CoolMind,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.