Ho un'immagine res/drawable/test.png
(R.drawable.test).
Voglio passare questa immagine a una funzione che accetta Drawable
, ad es mButton.setCompoundDrawables()
.
Quindi, come posso convertire una risorsa immagine in un Drawable
?
Ho un'immagine res/drawable/test.png
(R.drawable.test).
Voglio passare questa immagine a una funzione che accetta Drawable
, ad es mButton.setCompoundDrawables()
.
Quindi, come posso convertire una risorsa immagine in un Drawable
?
Risposte:
La tua attività dovrebbe avere il metodo getResources. Fare:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Questo codice è obsoleto:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Usa questo invece:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(dove il terzo parametro è un'istanza del tema opzionale).
Il getDrawable (int id)
metodo è ammortizzato a partire dall'API 22.
Invece dovresti usare il getDrawable (int id, Resources.Theme theme)
API 21+
Il codice sarebbe simile a questo.
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Vorrei solo aggiungere che se stai ricevendo un messaggio "deprecato" quando usi getDrawable (...) dovresti invece usare il seguente metodo dalla libreria di supporto.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Non è necessario utilizzare getResources () quando si utilizza questo metodo.
Ciò equivale a fare qualcosa di simile
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
Funziona su entrambe le versioni pre e post Lollipop.
Ottieni Drawable dalla risorsa vettoriale indipendentemente dal suo vettore:
AppCompatResources.getDrawable(context, R.drawable.icon);
Nota:
ContextCompat.getDrawable(context, R.drawable.icon);
produrrà android.content.res.Resources$NotFoundException
per risorsa vettoriale.
Se stai cercando di ottenere il disegno dalla vista in cui è impostata l'immagine come,
ivshowing.setBackgroundResource(R.drawable.one);
quindi il drawable restituirà solo un valore null con il seguente codice ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Quindi, è meglio impostare l'immagine con il seguente codice, se si desidera recuperare il disegno da una vista particolare.
ivshowing.setImageResource(R.drawable.one);
solo allora il disegno sarà convertito esattamente.
Se stai ereditando da un frammento puoi fare:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)