wake-up-neo.com

Unterschied zwischen ActionBarSherlock und ActionBar-Kompatibilität

Was ist der Unterschied zwischen ActionBarSherlock und Action Bar Compatibility

Vor ein paar Tagen hat Google die ActionBar-Kompatibilität veröffentlicht, die mich so verwirrt. Funktioniert die Aktionsleisten-Kompatibilität genauso wie ActionBarSherlock und ist die Codierung identisch?

Beispiel: Wird App-Symbol zum Navigieren nach oben oder ActionBar.Tab in der Aktionsleisten-Kompatibilität unterstützt?

154
xDragonZ

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

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

--BEARBEITEN--

Es sieht so aus, als hätten sich die Dinge geändert und es gibt keinen Unterschied mehr zwischen ActionBarSherlock und der Kompatibilität der Aktionsleiste. Bitte lesen Sie die Kommentare unten für Details.

--BEARBEITEN--

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

--EDIT-- Wie LOG_TAG bereits erwähnt, wird die Aktionsleiste jetzt in der Android Support Library unterstützt. Ich hatte noch keine Möglichkeit, sie zu verwenden, aber ich könnte mir vorstellen, dass dies die ist am besten zu benutzen.

61
Kurtis Nusbaum

ActionBarSherlock vs ActionBarCompat:

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

 ActionBarSherlock vs ActionBarCompat **strong text**

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

schritte:

  1. Importieren AppCompat Projekt.

  2. Ersetzen Sie SherlockFragmentActivity durch ActionBarActivity.

  3. Ersetzen Sie SherlockFragment durch Fragment.

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

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Ändern Sie Ihre Themes und Styles.

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

enter image description here

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

Vergessen Sie nicht, dies zu lesen developer.Android für mehr über ABC!

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

Ausgabe:

enter image description here

Credits: Gabriele Mariotti

113
LOG_TAG

Ergänzen Sie @Kurtis Nusbaum einfach mit einem praktischen Beispiel.

UPDATE: Wie @ rudy-s mit der neuesten Android support library (api 18)) sagte, haben sie bereits eine eingebaute Unterstützung für die Aktionsleiste (ActionBarCompat-Klasse genannt).

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

App using compatibility library

App using sherlock library

Nun das Aussehen beim Drücken der Menütaste:

App using compatibility on menu pressed

App using sherlock on menu pressed


Wie Sie sehen können, erzwingen die Bilder nur, was gesagt wurde. Durch die Kompatibilität mit der Aktionsleiste wird die Aktionsleiste nur angezeigt, wenn das Gerät, auf dem Sie ausgeführt werden, API-Level 3.0 oder höher hat. Sherlock hingegen ist allgemeiner.

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;
     }
}

Sherlock's 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);
    }

}

Für die Sherlock-App war eine zusätzliche Konfiguration erforderlich:

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

UPDATE: Wie @ rudy-s mit der neuesten Android support library (api 18)) sagte, haben sie bereits eine eingebaute Unterstützung für die Aktionsleiste (ActionBarCompat-Klasse genannt).

41
Bruno Mateus

Actionbar Sherlock ist weit fortgeschrittener und ehrgeiziger als das einfache Actionbar-Kompatibilitätsprojekt.

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

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

  • setNavigationMode (für Tabs und Spinner in der Aktionsleiste)
  • Dialog-Fragmente
  • 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 ein ICS feature (!) Hierfür 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 onCreateOptions-Menü implementieren können, müssen wir sicherstellen, dass der SupportMenuInflater verwendet wird.
  • Zwei Themen, die Holo.Dark und Holo.Light nicht sehr ähnlich sind (Theme.Sherlock, Theme.Sherlock.Light)
  • Die ICS Funktion "Aktionsleiste teilen"

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

39
Glenn Bech

Die Implementierung von @Jake geht weit über die Actionbar-Kompatibilität hinaus, genauer gesagt, Actionbar Compat ist nur ein einfaches 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 die gleiche Cross-kompatible Aktionsleiste ist, haben sie einen anderen Ansatz.

ActionbarCompat Aproach

Diese Implementierung verwendet nicht die Compatibility Android support library, sondern erstellt eine Basisklasse mit dem Namen ActionBarActivity erstellt eine einzelne Instanz eines Helper this Der Helfer fungiert als Factory selbst, die eine andere Implementierung für die drei Segmente von APIS zurückgibt

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

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 die kompatiblen Sherlocks unterschiedliche Implementierungen vornehmen, ist jedoch eine für "Compat" und die andere für Native. Sie müssen entweder von SherlockActivity oder von SherlockFragmentActivity aus erweitern, da diese beiden Basisklassen über die Methode zum Auslösen der ActionBar verfügen.

Dies ist ein großes und komplexes Projekt, das nicht in einem einzigen Beitrag erklärt werden kann. Schlage vor, dass du dich umgibst Sherlock Github Repo sieh es dir an und wie Jeff Atwood sagt

enter image description here

26
Necronet
  • Ich bin der festen Überzeugung, dass Sie ActionBarCompat fü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.

Warum sollten Sie ActionBarCompat ActionBarSherlock vorziehen?

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

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

  2. Ein weiterer guter Grund ist, dass es den Navigation Drawer pattern - Code direkt unterstützt, ActionBarSherlock jedoch nicht. Wenn Sie diese Schublade also zu einem vorhandenen Projekt/einer vorhandenen App hinzufügen möchten, sollten Sie migrieren.

  3. Das letzte und Wichtigste ist, dass der Macher von ActionBarSherlock, Jake Wharton, auf Google+ bekannt gab, dass die Weiterentwicklung von ActionBarSherlock gestoppt wurde. ActionBarSherlock 4.4 ist die letzte Version und enthält möglicherweise Fehlerbehebungen. Es gibt jedoch keine neuen Funktionen. Wenn also neue Funktionen in der Aktionsleiste enthalten sind, können Sie mit ActionBarSherlock möglicherweise nicht Schritt halten.

10
Stephen

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

der folgende Block stammt aus offizielles Blog über diese beiden Bibliotheken:

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

  • Kann während der Entwicklung der Aktionsleisten-API auf dem neuesten Stand gehalten werden.
  • Integrierte Ancestral Navigation-Unterstützung.
  • Verwendung der Framework-Klassen Menu und MenuItem.
  • Verwenden Sie weiterhin die Fragment-Klasse der Support-Bibliothek.
  • Integrierte Unterstützung für ActionBarDrawerToggle zur Verwendung mit DrawerLayout.
  • Backport von PopupMenu.

ActionBarSherlock ist eine solide und erprobte Bibliothek, die Entwicklern seit langem sehr gute Dienste leistet. Wenn Sie es bereits verwenden und derzeit keine der oben genannten Voraussetzungen erfüllen, müssen Sie nicht migrieren.

7
ruidge