Was ist die Verbesserung von AppCompatActivity gegenüber ActionBarActivity?

164

android.support.v7.app.AppCompatActivity wurde gestern als neue Funktion in die neueste v7-Supportbibliothek aufgenommen.

Es wird gesagt, dass ActionBarActivitydies zugunsten des neuen veraltet ist AppCompatActivityund dass dies AppCompatActivitydie Basisklasse für Aktivitäten ist, die die Funktionen der Aktionsleiste der Unterstützungsbibliothek verwenden. Also, was sind die neuen Funktionen von AppCompatActivityover ActionBarActivity? Welche Verbesserungen AppCompatActivityhaben vorbei ActionBarActivity? Und was sind die Vorteile von AppCompatActivity? Könnte jemand ein paar Proben liefern?

Irgendwelche Tipps sind willkommen. Und danke im Voraus.

PS: Was mir am meisten erstaunte , ist , dass AppCompatActivitydie erweitert wird aus android.support.v4.app.FragmentActivityist die direkte Mutterklasse ActionBarActivity! Ich meine eigentlich jetzt, dass ActionBarActivityalles kann, was AppCompatActivitykann, warum hat Android letzteres herausgeschoben?

In der Zwischenzeit habe ich einen Blog-Beitrag gesehen, in dem es heißt: " Es ist keine Umbenennung von ActionBarActivitynach AppCompatActivity, die interne Logik von AppCompatist über verfügbar. AlsoAppCompatDelegate , was ist die" interne Logik "von AppCompat? Was kann AppCompatDelegateich tun? Könnte jemand ein paar Codes dazu posten?

SilentKnight
quelle
Ich habe es gelesen, es ist eine Einführung, zu flach.
SilentKnight
1
AppCompatActivity ist die übergeordnete Klasse von ActionBarActivity. Und für mehr Ideen müssen Sie sich mit Code befassen.
Pankaj Kumar
Ja, das ist mir aufgefallen.
SilentKnight

Antworten:

145

Wie Chris schrieb, ist die neue veraltete Version von ActionBarActivity(der einen erweiterten AppCompatActivityKlasse) eine sichere Abwärtskompatibilitätsklasse. Die Ablehnung ist nur ein Hinweis für Sie, wenn Sie AppCompatActivitystattdessen direkt new verwenden möchten. AppCompatActivityist eine neue, allgemeinere Implementierung, die die AppCompatDelegateKlasse intern verwendet.

Wenn Sie eine neue Entwicklung starten, sollten Sie lieber sofort eine neue AppCompatActivityKlasse verwenden. Wenn Sie die Möglichkeit haben, Ihre App zu aktualisieren, ersetzen Sie sie auch ActionBarActivitydurch die neue Aktivität. Andernfalls können Sie bei veralteten Aktivitäten bleiben und es wird überhaupt keinen Unterschied im Verhalten geben.

In Bezug auf AppCompatDelegatees ermöglicht es Ihnen, neue getönte Widgets in einer Aktivität zu haben, die weder AppCompatActivitynoch ist ActionBarActivity.

Beispielsweise erben Sie eine Aktivität von einer externen Bibliothek, die wiederum nicht von AppCompatActivitydieser Aktivität erbt, aber Sie möchten, dass diese Aktivität getönte Material-Widgets (Ansichten) enthält. Um es passieren , müssen Sie eine Instanz schaffen , AppCompatDelegatein Ihrer Aktivität, Überschreibung Methoden dieser Tätigkeit wie addContentView(), setContentView()usw. (siehe AppCompatDelegatejavadoc für die vollständige Liste der Methoden), und innerhalb dieser überschriebenen Methoden leiten die Anrufe an die innere AppCompatDelegateInstanz. AppCompatDelegatewird den Rest erledigen und Ihre "altmodische" Aktivität wird "materialisiert".

sergej shafarenka
quelle
Gutes Beispiel .. Danke @ sergej shafarenka
Rakesh L
2
Kannst du mir bitte sagen, was passiert, wenn ich Aktivität anstelle von Appcompactivity verwende? Ich habe gesucht, aber keine Lösung gefunden.
Bitte
35

Es ist meistens eine Namensänderung: ActionBarActivityBeschreibt nicht wirklich alles, was es jetzt tut. Sie können sicher verwenden, ActionBarActivitywenn Sie möchten. Stellen Sie es sich wie einen Symlink vor.

Chris Banes
quelle
AppCompatActivityIst die direkte Elternklasse von ActionBarActivity, die jetzt ActionBarActivityalles kann, was AppCompatActivitykann, warum Androiddie spätere rausgeschoben?
SilentKnight
4
@ SilentKnight: Wie Chris schrieb, handelt es sich meistens um eine Namensänderung. Zitat des Android-Entwicklerblogs : "Die AppCompat-Supportbibliothek begann mit bescheidenen, aber wichtigen Anfängen: einer einzigen konsistenten Aktionsleiste für alle Geräte der API 7 und höher. In Revision 21 übernahm sie eine neue Verantwortung: Materialfarbpalette, Widget-Tönung, Symbolleistenunterstützung und mehr für alle API 7+ -Geräte. Damit deckte der Name ActionBarActivity nicht wirklich den vollen Umfang dessen ab, was er wirklich tat. "
CommonsWare
3
Es ist nicht sicher , veraltete Klassen zu verwenden, da sie in zukünftigen Versionen entfernt werden müssen. Obwohl Sie problemlos alle Verweise darauf ersetzen können, ActionBarActivitywann es aus der Support-Bibliothek entfernt wird (z. B. beim Aktualisieren Ihrer App), würde ich empfehlen, es von nun an nicht mehr zu verwenden.
David.schreiber
12

Die AppCompat-Supportbibliothek begann mit bescheidenen, aber wichtigen Anfängen: einer einzigen konsistenten Aktionsleiste für alle Geräte mit API 7 und höher. In Revision 21 wurde eine neue Verantwortung übernommen : Bereitstellung einer Materialfarbpalette, Widget-Tönung, Symbolleistenunterstützung und mehr für alle API 7+ -Geräte. Damit deckte der Name ActionBarActivity nicht wirklich den gesamten Umfang dessen ab, was er wirklich tat .

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

AndroidGecko
quelle
Kannst du mir bitte sagen, was passiert, wenn ich Aktivität anstelle von Appcompactivity verwende? Ich habe gesucht, aber keine Lösung gefunden.
Ravindra Kushwaha
9

AppCompatActivitywurde in Android-SDK seit der Veröffentlichung der Android Support Appcompat Bibliothek eingeführt .

AppCompatActivityist die direkte untergeordnete Klasse von FragmentActivitysupport v4 und die direkte übergeordnete Klasse von support ActionBarActivity.

AppCompatActivityist die Basisklasse für Aktivitäten, die die Aktionsleistenfunktionen der Unterstützungsbibliothek verwenden .

Sie können ActionBarIhrer Aktivität eine hinzufügen , wenn Sie auf API-Ebene 7 oder höher ausgeführt werden, indem Sie diese Klasse für Ihre Aktivität erweitern und das Aktivitätsthema auf Theme.AppCompat oder ein ähnliches Thema festlegen .

Die Support v7-Appcompat-Bibliothek bietet Unterstützung für das Entwurfsmuster der Benutzeroberfläche der Aktionsleiste . Diese Bibliothek enthält Unterstützung für Implementierungen von Benutzeroberflächen für das Materialdesign .

Hier sind einige der Schlüsselklassen, die in der v7-Appcompat-Bibliothek enthalten sind:

  • ActionBar - Bietet eine Implementierung des Benutzeroberflächenmusters der Aktionsleiste.
  • AppCompatActivity- Fügt eine Anwendungsaktivitätsklasse hinzu, die als Basisklasse für Aktivitäten verwendet werden kann, die die Aktionsleistenimplementierung der Unterstützungsbibliothek verwenden .
  • AppCompatDialog- Fügt eine Dialogklasse hinzu , die als Basisklasse für AppCompat- Dialogfelder verwendet werden kann .
  • ShareActionProvider - Fügt Unterstützung für eine standardisierte Freigabeaktion (z. B. E-Mail oder Veröffentlichung in sozialen Anwendungen) hinzu, die in eine Aktionsleiste aufgenommen werden kann.

Nachdem Sie die Android-Unterstützungsbibliotheken heruntergeladen haben , befindet sich diese Bibliothek im Verzeichnis / extras / android / support / v7 / appcompat / .

SilentKnight
quelle
Was ist mit android.support.v4.app.ActivityCompat? Ist das nur der alte Name von AppCompatActivity?
Taylan
7

Bisher war der einzige Einstiegspunkt AppCompatdie jetzt veraltete ActionBarActivityKlasse. Leider haben Sie dadurch gezwungen, eine festgelegte Aktivitätshierarchie zu verwenden, die Dinge wie die Verwendung PreferenceActivityunmöglich machte.

Weitere Informationen finden Sie in den Support-Bibliotheken von Chris Banes, Version 22-1-0

Null Zeiger
quelle
1
Es ist Chris 'Blog, sehr geschätzt.
SilentKnight
2

Die neueste Version der Android-Unterstützungsbibliothek, 22.1, lehnt die ActionBarActivityVorteile ab AppCompatActivity, die verspricht, eine einheitliche Konsistenz ActionBarfür alle Geräte ab API Level 7 und höher zu erzielen

Arpit Gandhi
quelle