Unterschied zwischen ActionBarSherlock- und ActionBar-Kompatibilität

156

Was ist der Unterschied zwischen ActionBarSherlock und Action Bar-Kompatibilität ?

Vor ein paar Tagen hat Google gerade die ActionBar-Kompatibilität veröffentlicht, die mich so verwirrt. Funktioniert die Kompatibilität der Aktionsleiste mit der des ActionBarSherlock und ist die Codierung identisch?

Beispiel: Wird das App-Symbol zum Navigieren nach "up" oder " ActionBar.Tab" in der Kompatibilität der Aktionsleiste unterstützt?

xDragonZ
quelle
12
Zu Ihrer Information
Jake Wharton
3
youtube.com/… Dies ist, was Google von ActionBarSherlock vs ActionBarCompact
Rolf
Dies ist ein wichtiger und nützlicher Thread für diejenigen, die von ABS zu ABCompat migrieren möchten. Vielen Dank.
Ashokchakravarthi Nagarajan

Antworten:

61

ActionBarSherlock gibt Ihrer Anwendung eine Aktionsleiste *, unabhängig davon, auf welcher Version der Android-API Ihre App ausgeführt wird. Durch die Kompatibilität der Aktionsleiste erhalten Sie die Aktionsleiste nur, wenn das Gerät, auf dem Sie ausgeführt werden, API-Version 3.0 oder höher ist.

* Beachten Sie, dass ActionBarSherlock, wenn das Gerät, auf dem Sie ausgeführt werden, nicht 3.0 oder höher ist, eine eigene benutzerdefinierte Implementierung der Aktionsleiste verwendet, keine native.

--BEARBEITEN--

Es scheint, dass sich die Dinge geändert haben und es tatsächlich keinen Unterschied mehr zwischen ActionBarSherlock und der Kompatibilität der Aktionsleiste gibt. Bitte lesen Sie die Kommentare unten für Details.

--BEARBEITEN--

Nachdem ich jetzt beide verwendet habe, kann ich sagen, dass ich ActionBarSherlock der Action Bar-Kompatibilität vorziehe. ActionBarSherlock ist wirklich einfach und schön zu bedienen.

--EDIT-- Wie bereits in LOG_TAG erwähnt, wird die Aktionsleiste in der Android-Supportbibliothek jetzt unterstützt. Ich hatte noch keine Chance, es zu benutzen, aber ich würde mir vorstellen, dass es das beste ist, um es zu benutzen.

Kurtis Nusbaum
quelle
1
@ Anidamo Danke für das Heads Up. Ich könnte verrückt werden, aber ich könnte schwören, dass die Version im Android-Kompatibilitätspaket Ihnen irgendwann keine gegeben hat, wenn Sie vor 3.0 waren. Ich habe meine Antwort geändert.
Kurtis Nusbaum
35
Die Antwort ist auch völlig falsch - der Zweck des Kompatibilitätsbeispiels besteht darin, Geräte vor 3.0 zu unterstützen.
AlikElzin-Kilaka
8
Google hat eine neue abwärtskompatible Action Bar-Implementierung namens ActionBarCompat veröffentlicht, die Teil der Support Library r18 ist. Mit den ActionBarCompat-APIs können Sie das wesentliche Aktionsmuster für die Aktionsleiste in Ihre App integrieren und sind weitgehend mit Android 2.1 kompatibel.
LOG_TAG
3
Folgender Link erfährt Sie , whyund howum den neuen ActionBarCompat API zu verwenden, android-developers.blogspot.in/2013/08/...
VenoM
2
Nur für diejenigen, die glauben, Chromecast in ihre App integrieren zu wollen, würde ich die Verwendung der Appcompat-Bibliothek empfehlen. Die für die Chromecast-Integration erforderlichen MediaRouter-APIs hängen von appcompat ab. ActionBarSherlock kann nicht verwendet werden.
Clu
113

ActionBarSherlock vs ActionBarCompat:

Ich möchte nur ein paar Codeunterschiede zwischen ActionBarSherlock und ActionBarCompat Lib setzen

 ActionBarSherlock vs ActionBarCompat ** starker Text **

Wir können einige Apps von ActionBarSherlock auf ActionBarCompat migrieren:

Schritte:

  1. Import AppCompat Projekt.

  2. Ersetzen SherlockFragmentActivitydurch ActionBarActivity.

  3. Ersetzen SherlockFragmentdurch Fragment.

  4. Ändern Menu, MenuItemund getSupportMenuInflater()Verweise. Ändern Sie die Art und Weise, wie Sie Aktionsansichten erhalten.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Ändern Sie Ihre Themen und Stile .

Weitere Informationen finden Sie auf diesen Folien von + NickButcher (Google).

Geben Sie hier die Bildbeschreibung ein

Dank an Quellen: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Vergessen Sie nicht, diese developer.android zu lesen , um mehr über ABC zu erfahren!

Hinweis: Das Einrichten für Unit-Tests wie ABS ist mit der Support-Bibliothek leider nicht möglich.

Ausgabe:

Geben Sie hier die Bildbeschreibung ein

Credits: Gabriele Mariotti

LOG_TAG
quelle
1
Nur ein Update, dass ABS jetzt auch über Gradle-Projekte zu Gradle-Projekten hinzugefügt werden kann compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'und kein Bibliotheksprojekt sein muss.
Ankushg
Danke für die ausführliche Erklärung
Biswajit Das
41

Vervollständigen Sie einfach das, was @Kurtis Nusbaum mit einem praktischen Beispiel.

UPDATE: Wie @ rudy-s sagte, habe ich mit der neuesten Android-Unterstützungsbibliothek (API 18) gesehen, dass sie bereits eine integrierte Unterstützung für die Aktionsleiste (ActionBarCompat-Klasse genannt) haben.

Ich habe zwei einfache Anwendungen erstellt, um den visuellen Unterschied zwischen ActionBarSherlock und ActionBar-Kompatibilität zu zeigen. Siehe die Vergleichsbilder:

App mit Kompatibilitätsbibliothek

App mit Sherlock-Bibliothek

Nun das Aussehen, wenn die Menütaste gedrückt wird:

App mit Kompatibilität im Menü gedrückt

App mit Sherlock im Menü gedrückt


Wie Sie sehen können, erzwingen die Bilder nur das, was gesagt wurde. Mit der Aktionsleisten-Kompatibilität erhalten Sie die Aktionsleiste nur, wenn das Gerät, auf dem Sie ausgeführt werden, API-Level 3.0 oder höher ist. Während Sherlock allgemeiner ist.

Unten sehen Sie die Anwendungsquelle.

Die Menü-XML-Datei ist dieselbe:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_1"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:title="@string/action1"/>

<item
    android:id="@+id/action_2"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action2"/>

<item
    android:id="@+id/action_3"
    android:orderInCategory="100"
    android:showAsAction="ifRoom"
    android:title="@string/action3"/>

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings"/>

</menu>

Aktivität der Kompatibilität:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
     }

     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
     }
}

Sherlocks Aktivität:

public class MainActivity extends SherlockActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
        getSupportMenuInflater().inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

}

Eine zusätzliche Konfiguration war für die Sherlock-App erforderlich:

<style name="AppBaseTheme" parent="Theme.Sherlock.Light.DarkActionBar">

UPDATE: Wie @ rudy-s sagte, habe ich mit der neuesten Android-Unterstützungsbibliothek (API 18) gesehen, dass sie bereits eine integrierte Unterstützung für die Aktionsleiste (ActionBarCompat-Klasse genannt) haben.

Bruno Mateus
quelle
5
Eigentlich ist das nicht ganz richtig. Die Compat-Bibliothek kann und bietet Ihnen eine ActionBar-Implementierung auf Gingerbread. Diese App gibt Ihnen zum Beispiel einen AB auf GB und verwendet nicht Sherlock, sondern Compat. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid
Es ist nicht erforderlich, dass Sie dieses Actionbarcompat-Beispiel (z. B. aus dem Android-17-SDK) herausziehen und in ADT erstellen. Es wird auf einem GB-Gerät mit einer ActionBar ausgeführt. Ich habe es gerade selbst getestet, um es auf einem Desire HD mit 2.3.5 zu bestätigen.
Hamid
OK ich habe es. ActionBarSherlock bietet jedoch mehr Funktionen, nicht wahr?
Bruno Mateus
2
Mit der neuesten Android-Unterstützungsbibliothek (API 18) habe ich gesehen, dass sie bereits eine integrierte Unterstützung für die Aktionsleiste (ActionBarCompat-Klasse) haben.
Rudys
GingerBEARD? Liebe es.
Carlos P
39

Actionbar Sherlock ist weitaus fortschrittlicher und ehrgeiziger als das einfache Actionbar-Kompatibilitätsprojekt.

Die Kompatibilität der Aktionsleiste kann als "Beispiel" oder als guter Ausgangspunkt angesehen werden, wenn Sie nur eine Aktionsleiste über Ihre App schlagen möchten.

ActionBarSherlock baut auf der Kompatibilitätsbibliothek auf und bietet Ihnen (wie das Kompatibilitätsbeispiel für die Aktionsleiste) eine Aktionsleiste auf Geräten vor 3.0. Darüber hinaus verfügt es über zusätzliche Funktionen, die im ActionBar Compat-Code nicht enthalten sind. Dies beinhaltet Funktionen wie, ist aber nicht beschränkt auf

  • setNavigationMode (für Tabs und Spinner in der Aktionsleiste)
  • Dialogfragmente
  • Contextual Action Bar (CAB) Ein Menü, das die Aktionsleiste übernimmt und beispielsweise für die Mehrfachauswahl verwendet wird (http://developer.android.com/design/patterns/new-4-0.html). Dies ist eine ICS-Funktion ( !) Dazu musste eine Implementierung der ActionMode-Klasse (eingeführt in API Level 11) in die ActionbarSherlock-Bibliothek eingeführt werden
  • Fragment- und FragmentActivity-Implementierungen - Da Fragmente das Menü onCreateOptions implementieren können, müssen wir sicherstellen, dass der SupportMenuInflater verwendet wird.
  • Zwei Themen, die Holo.Dark und Holo.Light nicht sehr unähnlich sind (Theme.Sherlock, Theme.Sherlock.Light)
  • Die ICS-Funktion "Split Action Bar"

Der einzige Nachteil, den ich bei der Verwendung von ActionbarSherlock sehe, ist, dass Sie sich an diese Bibliothek binden. Wenn es aus irgendeinem Grund in naher Zukunft aussterben wird, müssen Sie es selbst warten (zum Beispiel, wenn keine Jellybean-Implementierung erfolgt). Dies ist ein Ärger (kein großes Problem), da alle Ihre Fragmente SherlockFragemnt und alle Ihre Aktivitäten erweitern. SherlockActivity.

Glenn Bech
quelle
Vermisse ich etwas Es scheint, dass Multi Select in ABS
Jiduvah
1
Entschuldigung für die Verspätung. Multi Select wird von ABS selbst nicht unterstützt. Sie können Multiselect jedoch mithilfe des ABS "ActionMode" implementieren, da ABS über eigene Implementierungen der ActionMode-Klassen verfügt. Wenn Sie in den "Mehrfachauswahlmodus" wechseln, setzen Sie den Auswahlmodus von ListView auf CHOICE_MODE_MULTIPLE und rufen ActionMode auf, indem Sie getSherlockActivity () aufrufen. StartActionMode (Rückruf)
Glenn Bech
26

Die Implementierung von @Jake geht weit über die Actionbar-Kompatibilität hinaus, genauer gesagt, Actionbar Compat ist nur ein grundlegendes Beispiel dafür, wie Sie alle Anwendungen mit einer Pseudo-Actionbar für Releases vor Honeycomb (API 13) unterstützen können. Obwohl ihr Ziel dieselbe kreuzkompatible Aktionsleiste ist, haben sie einen anderen Ansatz.

ActionbarCompat-Ansatz

Diese Implementierung macht keinen Gebrauch von der Bibliothek Kompatibilität Android - Unterstützung , anstatt es eine Basisklasse erstellen genannt ActionBarActivity eine einzelne Instanz eines erstellen Helfers dieser Helfer fungieren als Fabrik selbst , dass die Renditen diferent Implementierung für die drei Segmente von APIS, es kehrt

Der interessanteste Teil ist der ActionbarBaseHelper , da er den wichtigsten Code enthält. Ich schlage vor, Sie verstehen diese Klasse und erhalten das gesamte Beispiel.

Aktionsleiste Sherlock

Nun, das ist schwierig, weil ich nicht der Autor bin, vielleicht kann Jake das weiter erklären, aber ich werde es versuchen.

Genau wie der kompatible Sherlock eine andere Implementierung vornimmt, ist einer für "Compat" und der andere für Native. Sie müssen entweder von SherlockActivity oder von SherlockFragmentActivity aus erweitert werden, da diese beiden Basisklassen über die Methode zum Versenden der ActionBar verfügen.

Dies ist ein großes und komplexes Projekt, das nicht in einem einzigen Beitrag erklärt werden kann. Schlagen Sie vor, dass Sie sich in Sherlock Github Repo umschauen und einen Blick darauf werfen, wie Jeff Atwood sagt

Geben Sie hier die Bildbeschreibung ein

Necronet
quelle
10
  • Ich bin der festen Überzeugung, dass Sie ActionBarCompatfür alle neuen Projekte verwenden sollten, die ältere Geräte unterstützen möchten.

  • Es kann auch sinnvoll sein, vorhandene Projekte zu migrieren. Lesen Sie also weiter, um zu erfahren, warum Sie ActionBarCompat sofort migrieren oder verwenden sollten und wie Sie vorhandene Projekte migrieren können.

Warum sollten Sie ActionBarCompat ActionBarSherlock vorziehen?

Es gibt viele Gründe, warum Sie ActionbarCompat ActionbarSherlock vorziehen sollten.

  1. Zuallererst ist dieses Projekt von Google, Teil der Support-Bibliothek und wird daher wahrscheinlich neue Action Bar-bezogene Inhalte unterstützen, während Google sie mit Standard-Android veröffentlicht.

  2. Ein weiterer guter Grund ist, dass es das Navigation Drawer patternsofort einsatzbereite unterstützt, ActionBarSherlock jedoch nicht. Wenn Sie diese Schublade einem vorhandenen Projekt / einer vorhandenen App hinzufügen möchten, sollten Sie migrieren.

  3. Das letzte und wichtigste ist, dass der Schöpfer von ActionBarSherlock, Jake Wharton, auf Google+ bekannt gab, dass die Weiterentwicklung von ActionBarSherlock gestoppt wurde. ActionBarSherlock 4.4 ist die letzte Version und wird möglicherweise Fehlerbehebungen erhalten - es gibt jedoch keine neuen Funktionen: Wenn also neue Funktionen in der Aktionsleiste enthalten sind, können Sie mit actionbarsherlock möglicherweise nicht mithalten.

Steve
quelle
7

Vielleicht sollten wir die Antwort aktualisieren, weil Google die offizielle Actionbar-Unterstützung seit API18 veröffentlicht hat ?

Der folgende Block stammt aus einem offiziellen Blog über diese beiden Bibliotheken:

Wenn Sie eine Lösung eines Drittanbieters (z. B. ActionBarSherlock) verwenden, gibt es einige Gründe, ein Upgrade in Betracht zu ziehen:

  • Kann aktualisiert werden, wenn sich die Aktionsleisten-API weiterentwickelt.
  • Integrierte Unterstützung für die Ahnennavigation.
  • Verwendung der Framework-Klassen Menu und MenuItem.
  • Verwenden Sie weiterhin die Fragment-Klasse der Support Library.
  • Integrierte Unterstützung für ActionBarDrawerToggle zur Verwendung mit DrawerLayout.
  • Backport von PopupMenu.

ActionBarSherlock ist eine solide und bewährte Bibliothek, die Entwicklern seit langem sehr gute Dienste leistet. Wenn Sie es bereits verwenden und derzeit keine der oben genannten Funktionen benötigen, ist keine Migration erforderlich.

Ruidge
quelle