Qual é o aprimoramento do AppCompatActivity sobre o ActionBarActivity?

164

android.support.v7.app.AppCompatActivity foi adicionado à biblioteca de suporte v7 mais recente como um novo recurso ontem.

Diz-se que ActionBarActivityfoi preterido em favor da nova AppCompatActivitye que AppCompatActivityé a classe base para atividades que usam os recursos da barra de ação da biblioteca de suporte. Então, quais são os novos recursos do AppCompatActivityover ActionBarActivity? Quais aprimoramentos AppCompatActivitytêm mais ActionBarActivity? E quais são as vantagens AppCompatActivity? Alguém poderia fornecer algumas amostras?

Todas as dicas são apreciadas. E obrigado antecipadamente.

PS: o que mais me surpreendeu é o AppCompatActivityque é estendido a partir android.support.v4.app.FragmentActivityda classe pai direta ActionBarActivity! Quero dizer, na verdade, agora que ActionBarActivitypode fazer qualquer coisa AppCompatActivity, por que o Android empurrou o último?

Enquanto isso, vi um post no blog que afirma: " Não é uma renomeação de ActionBarActivitypara AppCompatActivity, a lógica interna de AppCompatestá disponível viaAppCompatDelegate ", então qual é a " lógica interna " de AppCompat? O que pode AppCompatDelegatefazer? Alguém poderia postar alguns códigos sobre isso?

SilentKnight
fonte
Eu li, é uma introdução, muito superficial.
SilentKnight
1
AppCompatActivity é a classe pai de ActionBarActivity. E, para ter mais idéia, você precisa procurar no código.
Pankaj Kumar
Sim, eu notei isso.
SilentKnight

Respostas:

145

Como Chris escreveu, a nova versão preterida ActionBarActivity(a AppCompatActivityclasse que se estende ) é segura para usar a classe de compatibilidade com versões anteriores. A descontinuação é apenas uma dica para você pedir para usar o novo AppCompatActivitydiretamente. AppCompatActivityé uma implementação nova e mais genérica que usa a AppCompatDelegateclasse internamente.

Se você inicia um novo desenvolvimento, deve usar a nova AppCompatActivityclasse imediatamente. Se você tiver a chance de atualizar seu aplicativo, substitua também a obsoleta ActionBarActivitypela nova atividade. Caso contrário, você poderá permanecer com atividades obsoletas e não haverá nenhuma diferença no comportamento.

Quanto a AppCompatDelegateisso, permite que você tenha novos widgets coloridos em uma atividade, que não é nem AppCompatActivitynem ActionBarActivity.

Por exemplo, você herda uma atividade de uma biblioteca externa que, por sua vez, não herda, AppCompatActivitymas deseja que essa atividade tenha widgets de materiais coloridos (visualizações). Para que isso aconteça, você precisa criar uma instância de AppCompatDelegatedentro de sua atividade, substituir métodos dessa atividade como addContentView(), setContentView()etc. (consulte AppCompatDelegatejavadoc para obter a lista completa de métodos) e, dentro desses métodos substituídos, encaminhar as chamadas para a AppCompatDelegateinstância interna . AppCompatDelegatefará o resto e sua atividade "antiquada" será "materializada".

sergej shafarenka
fonte
Bom exemplo .. Obrigado @ sergej shafarenka
Rakesh L
2
Você pode me dizer o que acontece quando usarei Activity no lugar de Appcompactivity? Eu
tentei
35

É principalmente uma mudança de nome: ActionBarActivitynão descreve realmente tudo o que faz agora. Você pode usar com segurança, ActionBarActivityse desejar. Pense nisso como um link simbólico.

Chris Banes
fonte
AppCompatActivityé a classe pai direta de ActionBarActivity, agora que ActionBarActivitypode fazer tudo o que AppCompatActivitypode fazer, por que Androidempurrar para fora mais tarde?
SilentKnight:
4
@ SilentKnight: Como Chris escreveu, é principalmente uma mudança de nome. Citando o Blog dos desenvolvedores do Android : "A Biblioteca de suporte do AppCompat começou com um começo humilde, mas importante: uma única barra de ação consistente para todos os dispositivos da API 7 e superiores. Na revisão 21, assumiu uma nova responsabilidade: trazer paleta de cores dos materiais, tonalidades de widgets, Suporte à barra de ferramentas e muito mais a todos os dispositivos da API 7 ou superior. Com isso, o nome ActionBarActivity não abrangeu realmente o escopo completo do que realmente fazia ".
CommonsWare
3
Não é seguro usar classes obsoletas, pois elas estão sujeitas a remoção em versões futuras. Embora você possa substituir facilmente todas as referências a ActionBarActivityquando ele é descartado da biblioteca de suporte (por exemplo, ao atualizar seu aplicativo), recomendo evitar o uso a partir de agora.
David.schreiber
12

A AppCompat Support Library começou com um começo humilde, mas importante: uma única barra de ação consistente para todos os dispositivos API 7 e superiores. Na revisão 21, assumiu uma nova responsabilidade : levar a paleta de cores do material, a matiz do widget, o suporte da Barra de Ferramentas e muito mais para todos os dispositivos API 7+. Com isso, o nome ActionBarActivity não abrangeu realmente o escopo completo do que realmente fez .

http://android-developers.blogspot.it/2015/04/android-support-library-221.html

AndroidGecko
fonte
..Pode me dizer o que acontece quando vou usar Activity no lugar de Appcompactivity? Eu
tentei
9

AppCompatActivityfoi introduzido no Android-SDK desde o lançamento da biblioteca de aplicativos de suporte para Android .

AppCompatActivityé a classe filha direta FragmentActivitydo suporte v4 e a classe pai direta ActionBarActivity.

AppCompatActivityé a classe base para atividades que usam os recursos da barra de ação da biblioteca de suporte .

Você pode adicionar um ActionBara sua atividade ao executar na API nível 7 ou superior , estendendo esta classe para sua atividade e configurando o tema da atividade como Theme.AppCompat ou um tema semelhante.

Quanto à biblioteca appcompat do suporte v7, ela adiciona suporte ao padrão de design da interface do usuário da Barra de Ação . Esta biblioteca inclui suporte para implementações de interface do usuário de design de material .

Aqui estão algumas das principais classes incluídas na biblioteca v7 appcompat:

  • ActionBar - Fornece uma implementação do padrão da interface do usuário da barra de ação.
  • AppCompatActivity- Adiciona uma classe de atividade do aplicativo que pode ser usada como classe base para atividades que usam a implementação da barra de ação da Biblioteca de Suporte .
  • AppCompatDialog- Adiciona uma classe de diálogo que pode ser usada como classe base para diálogos com temas do AppCompat .
  • ShareActionProvider - Adiciona suporte para uma ação de compartilhamento padronizada (como email ou postagem em aplicativos sociais) que pode ser incluída em uma barra de ação.

Depois de baixar as Bibliotecas de suporte do Android , essa biblioteca está localizada no diretório / extras / android / support / v7 / appcompat / .

SilentKnight
fonte
Que tal android.support.v4.app.ActivityCompat? Este é apenas o nome antigo de AppCompatActivity?
Taylan
7

Anteriormente, o único ponto de entrada AppCompatera através da ActionBarActivityclasse agora obsoleta . Infelizmente, isso forçou você a usar uma hierarquia de atividades definida que PreferenceActivityimpossibilitava o uso de coisas .

veja support-libraries-v22-1-0 de chris banes para obter mais informações

Ponteiro nulo
fonte
1
É o blog do Chris, muito apreciado.
SilentKnight
2

A versão mais recente da biblioteca de suporte ao Android, 22.1, substitui o ActionBarActivityfavor de AppCompatActivity, que promete trazer um único consistente ActionBarpara todos os dispositivos que começam com o API Level 7 e superior

Arpit Gandhi
fonte