Differenza tra ActionBarSherlock e la compatibilità di ActionBar


156

Qual è la differenza tra ActionBarSherlock e Compatibilità della barra delle azioni

Pochi giorni fa Google ha appena rilasciato la compatibilità con ActionBar che mi rende così confuso. La compatibilità della barra delle azioni funziona allo stesso modo di ActionBarSherlock e la codifica è la stessa?

Esempio: l' icona dell'app per navigare "su" o ActionBar.Tab è supportata nella compatibilità della barra delle azioni?


12
Cordiali saluti, ho scritto un post sul blog per questo blog di Square: eng.squareup.com/2012/05/actionbarsherlock-as-a-base.html
Jake Wharton

3
youtube.com/… Questo è ciò che Google pensa di ActionBarSherlock vs ActionBarCompact
Rolf ツ

Questo è un thread importante e utile per coloro che vogliono migrare da ABS ad ABCompat. Grazie.
Ashokchakravarthi Nagarajan,

Risposte:


61

ActionBarSherlock fornisce alla tua applicazione una barra delle azioni indipendentemente * dalla versione dell'API Android su cui viene eseguita l'app. La compatibilità della barra delle azioni fornisce la barra delle azioni solo se il dispositivo su cui è in esecuzione è di livello API 3.0 o superiore.

* Si noti che se il dispositivo su cui si esegue non è 3.0 o versione successiva, ActionBarSherlock utilizzerà la propria implementazione personalizzata della barra delle azioni, non nativa.

--MODIFICARE--

Sembra che le cose siano cambiate e in realtà non c'è più alcuna differenza tra ActionBarSherlock e la compatibilità della barra delle azioni. Si prega di leggere i commenti qui sotto per i dettagli.

--MODIFICARE--

Dopo aver usato entrambi ora, posso dire che in realtà preferisco ActionBarSherlock alla compatibilità della barra delle azioni. ActionBarSherlock è davvero facile e piacevole da usare.

--EDIT-- Come menzionato LOG_TAG, ora c'è il supporto per la barra delle azioni nella Libreria di supporto Android. Non ho ancora avuto la possibilità di usarlo, ma immagino che sia il migliore da usare.


1
@Anidamo Grazie per il testa a testa. Potrei diventare pazzo, ma potrei giurare che ad un certo punto, la versione nel pacchetto di compatibilità Android non ti ha dato uno se il tuo pre-3.0. Ho modificato la mia risposta.
Kurtis Nusbaum,

35
Inoltre, la risposta è totalmente errata: lo scopo dell'esempio di compatibilità è supportare dispositivi pre-3.0.
AlikElzin-Kilaka,

8
Google ha rilasciato una nuova implementazione della barra delle azioni compatibile con le versioni precedenti denominata ActionBarCompat che fa parte della libreria di supporto r18. Le API di ActionBarCompat ti consentono di creare il modello di progettazione della barra delle azioni essenziale nella tua app, con un'ampia compatibilità con Android 2.1.
LOG_TAG

3
Il seguente link ti dice whye howdi usare la nuova API ActionBarCompat
VenoM

2
Solo per aggiungere, per coloro che pensano di voler integrare Chromecast nella propria app, consiglio vivamente di utilizzare la libreria appcompat. Le API di MediaRouter necessarie per l'integrazione di Chromecast dipendono dall'appcompat; ActionBarSherlock non può essere utilizzato.
clu,

113

ActionBarSherlock vs ActionBarCompat:

Voglio solo mettere poche differenze di codice tra ActionBarSherlock e ActionBarCompat Lib

 ActionBarSherlock vs ActionBarCompat ** testo forte **

Possiamo migrare alcune app da ActionBarSherlock ad ActionBarCompat:

passaggi:

  1. Importa progetto AppCompat .

  2. Sostituisci SherlockFragmentActivitycon ActionBarActivity.

  3. Sostituisci SherlockFragmentcon Fragment.

  4. Cambiamento Menu, MenuIteme getSupportMenuInflater()riferimenti. Modifica il modo in cui ottieni le visualizzazioni delle azioni.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Modifica temi e stili .

Per ulteriori informazioni, consultare queste diapositive di + NickButcher (Google)

inserisci qui la descrizione dell'immagine

Grazie alle fonti: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.html http://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/

Non dimenticare di leggere questo developer.android per ulteriori informazioni su ABC!

Nota: la configurazione per i test unitari allo stesso modo dell'ABS non è purtroppo possibile con la libreria di supporto.

Produzione:

inserisci qui la descrizione dell'immagine

Crediti: Gabriele Mariotti


1
Solo un aggiornamento che ABS ora può anche essere aggiunto ai progetti Gradle tramite compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'e non deve essere un progetto di biblioteca.
ankushg

Grazie per la spiegazione dettagliata
Biswajit Das,

41

Sto solo completando quello che @Kurtis Nusbaum con un esempio pratico.

AGGIORNAMENTO: come ha detto @ rudy-s, con la più recente libreria di supporto Android (API 18), ho visto che hanno già il supporto integrato per ActionBar (chiamato classe ActionBarCompat).

Ho creato due semplici applicazioni per mostrare la differenza visiva tra ActionBarSherlock e ActionBar Compatibility. Vedi le immagini comparative:

App che utilizza la libreria di compatibilità

App che utilizza la libreria Sherlock

Ora l'aspetto quando viene premuto il pulsante menu:

App che utilizza la compatibilità sul menu premuto

App che utilizza lo sherlock nel menu premuto


Come puoi vedere, le immagini applicano solo ciò che è stato detto. La compatibilità della barra delle azioni fornisce la barra delle azioni solo se il dispositivo su cui è in esecuzione è di livello API 3.0 o superiore. Mentre Sherlock è più generale.

Di seguito puoi vedere l'origine dell'applicazione.

Il file xml del menu è lo stesso:

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

Attività di compatibilità:

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

Attività di Sherlock:

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

}

Era necessaria un'ulteriore configurazione sull'app Sherlock:

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

AGGIORNAMENTO: come ha detto @ rudy-s, con la più recente libreria di supporto Android (API 18), ho visto che hanno già il supporto integrato per ActionBar (chiamato classe ActionBarCompat).


5
In realtà, questo non è del tutto corretto. La libreria Compat può e ti offre un'implementazione di ActionBar su Gingerbread. Questa app, ad esempio, ti dà un AB su GB e non usa Sherlock ma Compat. play.google.com/store/apps/details?id=uk.co.mxdata.rootle
Hamid

Non è necessario, se si estrae il campione di actionbarcompat (ad esempio da Android-17 SDK) e lo si crea in ADT, verrà eseguito su un dispositivo GB con ActionBar. Ho appena testato me stesso per confermare su Desire HD con 2.3.5.
Hamid,

Ok ho capito. Tuttavia, ActionBarSherlock offre più funzionalità, no?
Bruno Mateus,

2
Con la più recente libreria di supporto Android (API 18), ho visto che hanno già il supporto integrato per ActionBar (chiamato classe ActionBarCompat).
Rudy s

GingerBEARD? Lo adoro.
Carlos P,

39

Actionbar Sherlock è molto più avanzato e molto più ambizioso del semplice progetto di compatibilità di Actionbar.

La compatibilità della barra delle azioni può essere considerata un "esempio" o un buon punto di partenza se si desidera colpire solo una barra delle azioni sulla parte superiore dell'app.

ActionBarSherlock si basa sulla libreria di compatibilità e offre (come l'esempio di compatibilità della barra delle azioni) una barra delle azioni su dispositivi precedenti alla 3.0. Inoltre ha funzionalità extra non presenti nel codice di compatibilità di ActionBar. Questo include funzionalità come, ma non solo

  • setNavigationMode (per schede e spinner nella barra delle azioni)
  • Frammenti di dialogo
  • Contextual Action Bar (CAB) un menu che assume la barra delle azioni, utilizzato ad esempio per la selezione multipla (http://developer.android.com/design/patterns/new-4-0.html) Questa è una funzione ICS ( !) Per questo, un'implementazione della classe ActionMode (introdotta nel livello API 11) doveva essere introdotta nella libreria ActionbarSherlock
  • Implementazioni Fragment e FragmentActivity: poiché i frammenti possono implementare il menu onCreateOptions, dobbiamo assicurarci che sia utilizzato SupportMenuInflater.
  • Due temi non molto diversi da quelli di Holo.Dark e Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
  • La funzione ICS "split action bar"

L'unico aspetto negativo che vedo nell'uso di ActionbarSherlock è che ti blocchi in quella libreria. Se per qualche motivo si estinguerà nel prossimo futuro, dovrai mantenerlo tu stesso (ad esempio se non arriva l'implementazione di Jellybean). Questa è una seccatura (non un grosso problema) poiché tutti i tuoi frammenti estendono SherlockFragemnt e tutte le tue attività. SherlockActivity.


Mi sto perdendo qualcosa? Sembra che la selezione multipla NON sia supportata in ABS
jiduvah,

1
Scusa per il ritardo. La selezione multipla non è di per sé supportata dall'ABS. Tuttavia, è possibile implementare Multiselect utilizzando ABS "ActionMode", poiché ABS ha le proprie implementazioni delle classi ActionMode. Quando si passa alla "modalità di selezione multipla", si imposta la modalità di scelta di ListView su CHOICE_MODE_MULTIPLE e si richiama ActionMode chiamando getSherlockActivity (). StartActionMode (callback)
Glenn Bech,

26

Bene l'implementazione di @Jake va ben oltre quella di Actionbar compat, per essere più precisi Actionbar Compat è solo un esempio di base su come è possibile supportare tutte le applicazioni con una pseudo-actionbar per le versioni precedenti di Honeycomb (API 13). Sebbene il loro obiettivo sia la stessa barra di azione cross-compatibile, hanno un approccio diverso.

ActionbarCompat Aproach

Questa implementazione non fa uso della libreria di supporto Android Compatibilità invece crea una classe base chiamata ActionBarActivity crea una singola istanza di un Helper questo helper funge da factory stesso che restituisce un'implementazione diversa per i tre segmenti di APIS, restituisce

La parte più interessante è in ActionbarBaseHelper , perché ha il codice più importante, ti suggerisco di capire questa classe e otterrai l'intero esempio.

Barra delle azioni Sherlock

Beh, questo è complicato perché, non sono l'autore, forse Jake può spiegarlo ulteriormente, ma ci proverò.

Proprio come il compat Sherlock fa un'implementazione diversa ma uno è per "Compat" e l'altro è nativo. Ti obbliga a estenderti da SherlockActivity o da SherlockFragmentActivity, perché queste due classi base hanno il metodo per inviare ActionBar.

Questo è un progetto ampio e complesso, che non può essere spiegato in un singolo post. Ti suggerisco di scavare nel repository Sherlock Github per dare un'occhiata e come dice Jeff Atwood

inserisci qui la descrizione dell'immagine


10
  • Sono fermamente convinto che dovresti utilizzarlo ActionBarCompatper tutti i nuovi progetti che vogliono supportare dispositivi più vecchi.

  • Potrebbe anche avere senso migrare i progetti esistenti. Continua a leggere per scoprire perché dovresti migrare o usare ActionBarCompat immediatamente e come migrare i progetti esistenti.

Perché dovresti preferire ActionBarCompat rispetto ad ActionBarSherlock?

Ci sono molti motivi per cui dovresti preferire ActionbarCompat a ActionbarSherlock.

  1. Prima di tutto questo progetto è di Google, fa parte della Libreria di supporto e quindi probabilmente supporterà nuovi elementi relativi alla barra delle azioni contemporaneamente a Google che li rilascia con Android di serie.

  2. Un altro buon motivo è che supporta il Navigation Drawer patterndiritto immediato, mentre ActionBarSherlock no. Pertanto, se si desidera aggiungere questo cassetto a un progetto / app esistente, è necessario migrare.

  3. L'ultimo e importante è che il creatore di ActionBarSherlock, Jake Wharton, ha annunciato su Google+ che l'ulteriore sviluppo di ActionBarSherlock è stato interrotto. ActionBarSherlock 4.4 è l'ultima versione e potrebbe ricevere correzioni di bug, ma non ci saranno nuove funzionalità: Quindi se una nuova funzionalità è inclusa nella barra delle azioni, potresti non tenerne il passo con actionbarsherlock.


7

Forse dovremmo aggiornare la risposta perché Google ha pubblicato il supporto ufficiale di Actionbar dall'API18 ?

blocco sotto è dal blog ufficiale su queste due librerie:

Se stai usando una soluzione di terze parti (come ActionBarSherlock), ci sono alcuni motivi per considerare l'aggiornamento:

  • Può essere aggiornato con l'evolversi dell'API della barra delle azioni.
  • Supporto di navigazione ancestrale integrato.
  • Utilizzo delle classi Menu Menu e MenuItem.
  • Continuare a utilizzare la classe Frammento della libreria di supporto.
  • Supporto integrato per ActionBarDrawerToggle per l'uso con DrawerLayout.
  • Backport di PopupMenu.

ActionBarSherlock è una libreria solida e ben collaudata che ha servito gli sviluppatori molto bene per molto tempo. Se lo stai già utilizzando e al momento non richiedi nessuno dei precedenti, non è necessario migrare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.