Como resolver o problema do método depreciado no estúdio andróide?
Você provavelmente notou que quando você escreve algo como:
context.getResources().getColor(R.color.some_color_resource_id);
Android Studio lhe dará uma mensagem de cotão avisando que o método Resources#getColor(int) foi depreciado em Marshmallow em favor do novo método, Theme-aware Resources#getColor(int, Theme). Você também já deve saber que a alternativa fácil para evitar este aviso do lint nestes dias é chamar:
ContextCompat.getColor(context, R.color.some_color_resource_id);
que é essencialmente uma forma abreviada de escrever:
if (Construir.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return context.getResources().getColor(id, context.getTheme());
} else {
return context.getResources().getColor(id);
}
Easy enough. Mas o que está realmente a acontecer aqui? Por que esses métodos foram depreciados em primeiro lugar e o que os novos métodos temáticos têm a oferecer que não existiam antes?
Se você está usando o Android Studio como IDE para o desenvolvimento de aplicações androide, você encontrará esse problema com o androide SDK versão 22 e superior.
por exemplo considere o seguinte caso:
ANDROID.SUPPORT.V7.ACTIONBARACTIVITY IS DEPRECATED
Isto porque a classe ActionBarActivity foi depreciada e o Android Studio ainda não alterou a classe padrão Parent Activity de ActionBarActivity para AppCompatActivity.
A nova versão de ActionBarActivity (a que estende a classe AppCompatActivity) é uma classe segura para usar a classe de compatibilidade retroativa. Deprecation of ActionBarActivity é apenas uma dica para você usar a nova AppCompatActivity diretamente.
AppCompatActivity é uma implementação nova e mais genérica que usa a classe AppCompatDelegate internamente.
Regarding AppCompatDelegate, ela permite que você tenha novos widgets coloridos em uma atividade, que não é nem AppCompatActivity nem ActionBarActivity.
Por exemplo, você herda uma atividade de uma biblioteca externa, que, por sua vez, não herda de AppCompatActivity, mas você quer que essa atividade tenha widgets de materiais tinted (visualizações).
Para fazer isso acontecer você precisa criar uma instância de AppCompatDelegate dentro da sua atividade, sobrepor métodos dessa atividade como addContentView(), setContentView() etc.
(veja AppCompatDelegate javadoc para a lista completa de métodos), e dentro desses métodos sobrepostos encaminhar as chamadas para a instância interna AppCompatDelegate. AppCompatDelegate fará o resto e sua atividade "old-fashion" será "materializada".
Quando mudarmos a classe de atividade pai para AppCompatActivity a mensagem de erro desaparecerá.
Artigos semelhantes
- O que Huawei pode fazer para superar o problema atual e como eles podem resolver o problema com o Departamento de Estado?
- Como um método principal é chamado em outra classe de método principal em Java?
- Haverá algum dia um método melhor para preservar os videojogos do que a emulação? Este método poderia ser legal?
- Um pequeno jogo de estúdio pode ganhar dinheiro com um jogo casual grátis para celular (ios/andróide) apenas com anúncios (vídeo recompensa)?