Com a nova API do Android 22, getResources().getDrawable()
agora está obsoleta. Agora, a melhor abordagem é usar apenas getDrawable()
.
O que mudou?
Resources#getDrawable(int)
e Resources#getColor(int)
foram obsoleto.
Com a nova API do Android 22, getResources().getDrawable()
agora está obsoleta. Agora, a melhor abordagem é usar apenas getDrawable()
.
O que mudou?
Resources#getDrawable(int)
e Resources#getColor(int)
foram obsoleto.
Respostas:
Você tem algumas opções para lidar com essa depreciação da maneira certa (e à prova de futuro ), dependendo do tipo de drawable que você está carregando:
A) desenháveis com atributos de tema
ContextCompat.getDrawable(getActivity(), R.drawable.name);
Você obterá um Drawable com estilo conforme instruído pelo tema Atividade. Provavelmente é isso que você precisa.
B) desenháveis sem atributos de tema
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
Você terá seu drawable sem estilo da maneira antiga. Observe: nãoResourcesCompat.getDrawable()
está obsoleto!
EXTRA) desenháveis com atributos de tema de outro tema
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Você deve usar o seguinte código da biblioteca de suporte:
ContextCompat.getDrawable(context, R.drawable.***)
Usar este método é equivalente a chamar:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
A partir da API 21, você deve usar o getDrawable(int, Theme)
método em vez de getDrawable(int)
, pois permite buscar um objeto extraível associado a um ID de recurso específico para a densidade / tema da tela. Chamar o getDrawable(int)
método descontinuado é equivalente a chamar getDrawable(int, null)
.
getDrawable (int id)
método da Context
classe. É o mesmo que getResources().getDrawable(id, getTheme());
e também usa a nova API.
getDrawable(int, Resources.Theme)
.
Substitua esta linha:
getResources().getDrawable(R.drawable.your_drawable)
com ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
EDITAR
ResourcesCompat
também está obsoleto agora. Mas você pode usar isso:
ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Aqui this
está o contexto)
para mais detalhes, siga este link: ContextCompat
getResources().getDrawable()
foi descontinuado no nível 22 da API. Agora, devemos adicionar o tema:getDrawable (identificação int, tema Resources.Theme) (adicionado no nível 21 da API)
Isto é um exemplo:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
Este é um exemplo de como validar para versões posteriores:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
} else {
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
Build.VERSION_CODES.LOLLIPOP is API 21
, então não deveria ser if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
ou if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Deixa pra lá. From below "O método foi adicionado na API 21, mas não foi preterido até a API 22. :)"
Você pode usar
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
isso é trabalho para mim
Apenas um exemplo de como corrigi o problema em uma matriz para carregar um listView, espero que ajude.
mItems = new ArrayList<ListViewItem>();
// Resources resources = getResources();
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
Tente o seguinte:
public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
Se você estiver segmentando SDK> 21 (pirulito ou 5.0), use
context.getDrawable(R.drawable.your_drawable_name)
getDrawable (int drawable) foi descontinuado no nível 22 da API. Para obter referência, consulte este link .
Agora, para resolver esse problema, temos que passar um novo construtor junto com o id como: -
getDrawable(int id, Resources.Theme theme)
Para soluções Faça o seguinte: -
Em Java: -
ContextCompat.getDrawable(getActivity(), R.drawable.name);
ou
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
Em Kotlin: -
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
ou
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
Espero que isso ajude você.
en api nível 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Agora você precisa implementar assim
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
Seguir uma única linha de código é suficiente, tudo será tratado por ContextCompat.getDrawable
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
Para alguns que ainda resolveram esse problema, mesmo depois de aplicar a sugestão desse segmento (eu costumava ser um desses), adicione esta linha na classe Application, no método onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Conforme sugerido aqui e aqui, às vezes isso é necessário para acessar vetores de recursos, especialmente quando você está lidando com itens de menu, etc.
No Kotlin você pode usar a extensão
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
então use como
context.getMyDrawable(R.drawable.my_icon)
Agora Build.VERSION_CODES.LOLLIPOP deve ser alterado para BuildVersionCodes.Lollipop, ou seja:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
BuildVersionCodes
uma classe específica para o Xamarin?
getDrawable (int id)
da classeResources
foi descontinuado. Agora você deve usar o métodogetDrawable (int id, Resources.Theme theme)
com o novo parâmetro de tema.