Android: alternativa a context.getDrawable ()


88

Ho usato in context.getDrawable()questo modo nel mio progetto:

Drawable greenProgressbar = context.getDrawable(R.drawable.custom_progressbargreen);

Ma Eclipse mi sta dando un errore che ha bisogno di un file Minimum API level of 21. Ciò significherebbe che dopo una rapida ricerca su Google la mia APP sarà utilizzabile solo su Android 5.0. Poiché non tutti i dispositivi utilizzano questa versione di Android, vorrei avere un'alternativa per context.getDrawable().

Risposte:


203

Il metodo precedentemente accettato è stato deprecato, secondo la documentazione dell'SDK 22:

Prima di android.os.Build.VERSION_CODES # JELLY_BEAN, questa funzione non recuperava correttamente la densità di configurazione finale quando l'ID risorsa passato qui è un alias di un'altra risorsa Drawable. Ciò significa che se la configurazione della densità della risorsa alias è diversa dalla risorsa effettiva, la densità del Drawable restituito sarebbe errata, determinando un ridimensionamento errato.

Come sottolineato in questa risposta, la soluzione migliore sarebbe usare ContextCompat : ContextCompat.getDrawable(context, R.drawable.***)


1
Ho accettato questa risposta ora perché è più pertinente :)
Bram

26

Prova ad aggiungere un getResources()dopo il contesto, quindi questo:

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

dovrebbe funzionare.


4
Resources.getDrawable è stato ritirato a favore di
Context.getDrawable

12

Ho avuto una stessa situazione in cui volevo fare riferimento al metodo getDrawable () che ora è deprecato.

cosa ho usato,

myButton.setImageDrawable(ContextCompat.getDrawable(getActivity(), R.drawable.ic_btn_off));

Spero che questo ti possa aiutare


9

Ho avuto un problema simile prima. Hai provato a farlo in questo modo?

Drawable greenProgressbar = context.getResources().getDrawable(R.drawable.custom_progressbargreen);

Questo è deprecato.
Taslim Oseni

2

Prova questo:

AppCompatResources.getDrawable(context, R.drawable.*)

1

Dovresti usare "getDrawable (id, this.getTheme ())". Questo metodo non è stato deprecato fino ad ora.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    view.setBackground(getResources().getDrawable(R.drawable.radioline,this.getTheme()));
} else {
   view.setBackground(getResources().getDrawable(R.drawable.radioline));
}

1

Accetto di utilizzare ContextCompact.getDrawable (Context context, int resID). Ha funzionato per me e la mia app è destinata all'API 19.


1

Puoi anche impostare la risorsa direttamente senza lavorare con il drawable (Kotlin):

btn.setImageResource(R.drawable.ic_XXX)

1

La soluzione per i programmatori Kotlin è simile a:

val greenProgressbar = context!!.getDrawable(R.drawable.custom_progressbargreen)

o (da API 22)

val greenProgressbar = ContextCompat.getDrawable(R.drawable.custom_progressbargreen)
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.