Quelle est l'amélioration d'AppCompatActivity par rapport à ActionBarActivity?

164

android.support.v7.app.AppCompatActivity a été ajoutée hier à la dernière bibliothèque de support v7 en tant que nouvelle fonctionnalité.

On dit que ActionBarActivitya été dépréciée en faveur de la nouvelle AppCompatActivityet qui AppCompatActivityest la classe de base pour les activités qui utilisent les actions bibliothèque de fonctions support de bar. Alors, quelles sont les nouvelles fonctionnalités de AppCompatActivityover ActionBarActivity? Quelles améliorations AppCompatActivityont plus ActionBarActivity? Et quels sont les avantages de AppCompatActivity? Quelqu'un pourrait-il fournir quelques échantillons?

Tous les conseils sont appréciés. Et merci d'avance.

PS: ce qui m'a le plus surpris, c'est ce AppCompatActivityqui est étendu à partir de android.support.v4.app.FragmentActivityla classe parente directe de ActionBarActivity! Je veux dire en fait maintenant qui ActionBarActivitypeut faire tout ce qui AppCompatActivitypeut faire, pourquoi Android a-t-il poussé ce dernier?

Pendant ce temps, j'ai vu un article de blog qui déclare: " Ce n'est pas un changement de nom de ActionBarActivityà AppCompatActivity, la logique interne de AppCompatest disponible viaAppCompatDelegate ", alors quelle est la " logique interne " de AppCompat? Que peut AppCompatDelegatefaire? Quelqu'un pourrait-il publier des codes à ce sujet?

SilentKnight
la source
Je l'ai lu, c'est une introduction, trop superficielle.
SilentKnight
1
AppCompatActivity est la classe parente d'ActionBarActivity. Et pour plus d'idées, vous devez vous pencher sur le code.
Pankaj Kumar
Oui, j'ai remarqué cela.
SilentKnight

Réponses:

145

Comme Chris l'a écrit, la nouvelle version obsolète de ActionBarActivity(la AppCompatActivityclasse d' extension ) est une classe de compatibilité descendante sûre à utiliser. Sa dépréciation n'est qu'un indice pour vous demander d'utiliser AppCompatActivitydirectement new à la place. AppCompatActivityest une nouvelle implémentation plus générique qui utilise la AppCompatDelegateclasse en interne.

Si vous démarrez un nouveau développement, vous devriez plutôt utiliser une nouvelle AppCompatActivityclasse tout de suite. Si vous avez la possibilité de mettre à jour votre application, remplacez également obsolète ActionBarActivitypar la nouvelle activité. Sinon, vous pouvez rester avec une activité obsolète et il n'y aura aucune différence de comportement.

En AppCompatDelegatece qui concerne , cela vous permet d'avoir de nouveaux widgets teintés dans une activité, ce qui n'est ni AppCompatActivityni ActionBarActivity.

Par exemple, vous héritez d'une activité d'une bibliothèque externe, qui, à son tour, n'hérite pas de AppCompatActivitymais vous voulez que cette activité ait des widgets (vues) de matériaux teintés. Pour y arriver, vous devez créer une instance de l' AppCompatDelegateintérieur de votre activité, remplacer les méthodes de cette activité comme addContentView(), setContentView()etc. (voir AppCompatDelegatejavadoc pour la liste complète des méthodes), et à l'intérieur de ces méthodes surchargées, transférer les appels vers l' AppCompatDelegateinstance interne . AppCompatDelegatefera le reste et votre activité «à l'ancienne» sera «matérialisée».

Sergej Shafarenka
la source
Bon exemple .. Merci @ sergej shafarenka
Rakesh L
2
Pouvez-vous me dire que ce qui se passe lorsque j'utilise Activity à la place d'Appcompactivity? J'ai cherché mais je n'ai pas obtenu la solution.Veuillez m'aider
Ravindra Kushwaha
35

C'est surtout un changement de nom: ActionBarActivityne décrit pas vraiment tout ce qu'il fait maintenant. Vous pouvez utiliser en toute sécurité ActionBarActivitysi vous le souhaitez. Pensez-y comme un lien symbolique.

Chris Banes
la source
AppCompatActivityest la classe parente directe de ActionBarActivity, maintenant qui ActionBarActivitypeut faire tout ce qui AppCompatActivitypeut faire, pourquoi Androidexpulsé le plus tard?
SilentKnight
4
@SilentKnight: Comme Chris l'a écrit, c'est surtout un changement de nom. Citant le blog des développeurs Android : "La bibliothèque de support AppCompat a commencé avec des débuts modestes mais importants: une seule barre d'action cohérente pour tous les appareils API 7 et supérieurs. Dans la révision 21, elle a pris de nouvelles responsabilités: apporter la palette de couleurs des matériaux, la teinte des widgets, Prise en charge de la barre d'outils, et plus encore pour tous les appareils API 7+. Avec cela, le nom ActionBarActivity ne couvrait pas vraiment toute la portée de ce qu'il faisait vraiment. "
CommonsWare
3
Il n'est pas sûr d'utiliser des classes obsolètes, car elles sont susceptibles d'être supprimées dans les versions futures. Bien que vous puissiez facilement remplacer toutes les références au ActionBarActivitymoment où il est supprimé de la bibliothèque de support (par exemple lors de la mise à jour de votre application), je vous recommande d'éviter de l'utiliser à partir de maintenant.
david.schreiber
12

La bibliothèque de support AppCompat a commencé avec des débuts modestes mais importants: une seule barre d'action cohérente pour tous les appareils API 7 et supérieurs. Dans la révision 21, il a assumé une nouvelle responsabilité : apporter la palette de couleurs des matériaux, la teinte des widgets, la prise en charge de la barre d'outils, etc. Avec cela, le nom ActionBarActivity ne couvrait pas vraiment toute la portée de ce qu'il faisait vraiment .

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

AndroidGecko
la source
..Pouvez-vous me dire que ce qui se passe lorsque j'utiliserai Activity à la place d'Appcompactivity? J'ai cherché mais je n'ai pas obtenu la solution.Veuillez m'aider
Ravindra Kushwaha
9

AppCompatActivitya été introduit dans Android-SDK depuis la sortie de la bibliothèque appcompat de support Android .

AppCompatActivityest la classe enfant directe de FragmentActivityde support v4 et la classe parent directe de ActionBarActivity.

AppCompatActivityest la classe de base pour les activités qui utilisent la barre d'actions de la bibliothèque de support fonctionnalités de la .

Vous pouvez ajouter un ActionBarà votre activité lors de l'exécution au niveau d'API 7 ou supérieur en étendant cette classe pour votre activité et en définissant le thème d'activité sur Theme.AppCompat ou un thème similaire.

Quant à la prise en charge de la bibliothèque appcompat v7, elle ajoute la prise en charge du modèle de conception d'interface utilisateur de la barre d'action . Cette bibliothèque prend en charge les implémentations d'interface utilisateur de conception de matériaux .

Voici quelques-unes des classes clés incluses dans la bibliothèque appcompat v7:

  • ActionBar - Fournit une implémentation du modèle d'interface utilisateur de la barre d'actions.
  • AppCompatActivity- Ajoute une classe d'activité d'application qui peut être utilisée comme classe de base pour les activités qui utilisent la barre d'actions de la bibliothèque de support implémentation de la .
  • AppCompatDialog- Ajoute une classe de dialogue qui peut être utilisée comme classe de base pour les boîtes de dialogue à thème AppCompat .
  • ShareActionProvider - Ajoute la prise en charge d'une action de partage standardisée (comme un courrier électronique ou une publication sur des applications sociales) qui peut être incluse dans une barre d'actions.

Après avoir téléchargé les bibliothèques de support Android , cette bibliothèque se trouve dans le répertoire / extras / android / support / v7 / appcompat / .

SilentKnight
la source
Et quoi android.support.v4.app.ActivityCompat? Est-ce juste l'ancien nom de AppCompatActivity?
Taylan
7

Auparavant, le seul point d'entrée dans AppCompatétait via la ActionBarActivityclasse désormais obsolète . Malheureusement, cela vous a obligé à utiliser une hiérarchie d'activités définie, ce qui a permis d'utiliserPreferenceActivity impossible l' .

voir support-bibliothèques-v22-1-0 de chris banes pour plus d'informations

pointeur nul
la source
1
C'est le blog de Chris, très apprécié.
SilentKnight
2

La dernière version de la bibliothèque de support Android, 22.1, rend obsolète le ActionBarActivityen faveur de AppCompatActivity, qui promet d'apporter une cohérence unique ActionBarpour tous les appareils à partir du niveau d'API 7 et supérieur.

Arpit Gandhi
la source