setBackgroundDrawable () obsoleto

86

Então, meu SDK vai de 15 para 21 e quando ligo setBackgroundDrawable(), o Android Studio me diz que está obsoleto.

Pensei em contornar isso usando:

int sdk = android.os.Build.VERSION.SDK_INT;

if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
    layout.setBackgroundDrawable(getResources().getDrawable(R.drawable.img_wstat_tstorm));
} else {
    layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));
}

Mas então, recebo um erro em "setBackground ()".

Então, como você lidaria com isso?

Makoto
fonte
Você recebe um erro ou um aviso?
Bryan Herbst
que valor você tem da versão min sdk no manifesto?
Manmohan Badaya
4
use setbackgroundresource (R.drawable.img_wstat_tstorm); para versão superior.setBackgroundDrawable está obsoleto na versão superior, esta esperança ajuda você
prakash
O SDk mínimo é 15. Eu tenho "setBackground ()" sublinhado em vermelho, mas o aplicativo é executado, então acho que é um aviso
Makoto
Você deve obter o Add @SupressWarning
SweetWisher ツ

Respostas:

105

É um assunto interessante. A maneira como você está fazendo está correta, aparentemente. Na verdade, é apenas uma mudança de decisão de nomenclatura. Como esta resposta indica, setBackground()apenas chama setBackgroundDrawable():

public void setBackground(Drawable background) {
    //noinspection deprecation
    setBackgroundDrawable(background);
}

@Deprecated
public void setBackgroundDrawable(Drawable background) { ... }

Você pode ver este tópico para obter mais informações sobre tudo isso.

Alex K
fonte
20
Você deve notar que setBackground()não funcionará para pré API16, uma alternativa poderia sersetBackgroundResource
Mood
26

talvez você possa tentar o seguinte:

setBackgroundResource(R.drawable.img_wstat_tstorm);
ouriço
fonte
18

É engraçado porque esse método está obsoleto, mas se você olhar o código-fonte do Android, você encontrará o seguinte:

   /**
     * Set the background to a given Drawable, or remove the background. If the
     * background has padding, this View's padding is set to the background's
     * padding. However, when a background is removed, this View's padding isn't
     * touched. If setting the padding is desired, please use
     * {@link #setPadding(int, int, int, int)}.
     *
     * @param background The Drawable to use as the background, or null to remove the
     *        background
     */
    public void setBackground(Drawable background) {
        //noinspection deprecation
        setBackgroundDrawable(background);
    }
Joaquin Iurchuk
fonte
12

Correto em 15 de agosto de 2018

Use as bibliotecas de suporte

Drawable drawable = ResourcesCompat.getDrawable(getResources(), drawableRes, null);
ViewCompat.setBackground(layout, drawable);
Stuart Campbell
fonte
7

Você está recebendo um erro porque getResources (). GetDrawable () recebe um id (int) e não um drawable como argumento. Experimente isto:

layout.setBackground(getResources().getDrawable(R.id.img_wstat_tstorm));

David C Adams
fonte
setBackground espera apenas Id de sorteio
SweetWisher ツ
Você está incorreto. Na documentação da API: android.view.View.setBackground (fundo Drawable); Parâmetros: background O Drawable para usar como fundo, ou null para remover o fundo.
David C Adams
4

Usa isto:

myView.background = ContextCompat.getDrawable(context, R.id.my_drawable)
Malwinder Singh
fonte
3
//Java
view.setBackground(ActivityCompat.getDrawable(context, R.drawable.bg))

//Kotlin 
view.background = ActivityCompat.getDrawable(context, R.drawable.bg)
Eliasz Kubala
fonte
2

Isso está correto no meu caso Resolva este problema

 imageView.setBackgroundResource(images[productItem.getPosition()]);
Sonu Kumar
fonte
1

Correto em 23 de novembro de 2018

Kotlin:

view.background = resources.getDrawable(R.drawable.ic_image,theme)

Se você incluir o parâmetro Theme.

Dimitri de Jesus
fonte
0

Estou usando uma minSdkVersion 16 e targetSdkVersion 23 O seguinte está funcionando para mim, ele usa ContextCompat.getDrawable (context, R.drawable.drawable);

Ao invés de usar: layout.setBackground(getResources().getDrawable(R.drawable.img_wstat_tstorm));

Em vez disso, use:

layout.setBackground(ContextCompat.getDrawable(getActivity(), R.drawable.img_wstat_tstorm));

getActivity() é usado em um fragmento, se chamar de um uso de atividade this

Vostro
fonte
Pergunta feita para minSdk 15
Harish Gyanani
-1
BitmapDrawable background = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.mipmap.Nome_imgem));
        getSupportActionBar().setBackgroundDrawable(background);
Vando Set
fonte
Realmente ajudaria se você
resumisse