web-dev-qa-db-fra.com

Différence entre la compatibilité ActionBarSherlock et ActionBar

Quelle est la différence entre ActionBarSherlock et Compatibilité de la barre d'action

Il y a quelques jours, Google vient de publier la compatibilité ActionBar qui me rend si confus. Est-ce que la compatibilité de la barre d'actions fonctionne de la même manière que le ActionBarSherlock et le codage est-il identique?

Exemple: Est-ce que icône de l'application pour naviguer "vers le haut" ou ActionBar.Tab pris en charge dans la compatibilité de la barre d'actions?

154
xDragonZ

ActionBarSherlock attribue à votre application une barre d’action quelle que soit * la version de l’API Android sur laquelle votre application est exécutée. Compatibilité de la barre d’action ne vous donne la barre d’action que si le périphérique sur lequel vous exécutez est le niveau API 3.0 ou supérieur.

* Notez que si le périphérique sur lequel vous travaillez n’est pas de version 3.0 ou supérieure, ActionBarSherlock utilisera sa propre implémentation personnalisée de la barre d’action, et non une version native.

--MODIFIER--

Il semble que les choses aient changé et qu’il n’y ait plus aucune différence entre ActionBarSherlock et la compatibilité de la barre d’action. S'il vous plaît lire les commentaires ci-dessous pour plus de détails.

--MODIFIER--

Après avoir utilisé les deux maintenant, je peux dire que je préfère réellement ActionBarSherlock à la compatibilité Action Bar. ActionBarSherlock est vraiment facile et agréable à utiliser.

--EDIT-- Comme l’a mentionné LOG_TAG, la barre d’action est désormais prise en charge dans la bibliothèque de support Android. Je n’ai pas encore eu l’occasion de l’utiliser, mais j’imagine que c’est la le meilleur à utiliser.

61
Kurtis Nusbaum

ActionBarSherlock vs ActionBarCompat:

Je veux juste mettre peu de différence de code entre ActionBarSherlock et ActionBarCompat Lib

 ActionBarSherlock vs ActionBarCompat **strong text**

Nous pouvons migrer certaines applications d'ActionBarSherlock vers ActionBarCompat:

pas:

  1. Importer AppCompat projet.

  2. Remplacez SherlockFragmentActivity par ActionBarActivity.

  3. Remplacez SherlockFragment par Fragment.

  4. Changer Menu, MenuItem et getSupportMenuInflater() références. Modifiez la façon dont vous obtenez les vues d’action.

    mSearchView = (SearchView)MenuItemCompat.getActionView(mSearchItem)

  5. Modifiez vos Thèmes et Styles.

Pour plus d'informations, s'il vous plaît se référer à ces diapositives par + NickButcher (Google)

enter image description here

Merci aux sources: http://gmariotti.blogspot.in/2013/07/actionbarsherlock-vs-actionbarcompat.htmlhttp://antonioleiva.com/actionbarcompat-migrating-actionbarsherlock/)

N'oubliez pas de lire ceci developer.Android pour en savoir plus sur ABC!

Remarque: La configuration pour les tests unitaires de la même manière, car l’ABS n’est malheureusement pas possible avec la bibliothèque de support.

Sortie:

enter image description here

Crédits: Gabriele Mariotti

113
LOG_TAG

Je viens de compléter ce que @Kurtis Nusbaum avec un exemple pratique.

UPDATE: comme @ rudy-s l'a dit, avec la plus récente Android (api 18), j'ai vu qu'ils disposaient déjà d'une prise en charge intégrée de la barre d'action (appelée classe ActionBarCompat).

J'ai construit deux applications simples pour montrer la différence visuelle entre la compatibilité ActionBarSherlock et ActionBar. Voir les images comparatives:

App using compatibility library

App using sherlock library

Maintenant, l'apparence lorsque le bouton de menu est enfoncé:

App using compatibility on menu pressed

App using sherlock on menu pressed


Comme vous pouvez le constater, les images ne font que renforcer ce qui a été dit. La compatibilité de la barre d’action ne vous donne la barre d’action que si le périphérique que vous utilisez est de niveau API supérieur ou égal à 3. Tandis que Sherlock est plus général.

Ci-dessous, vous pouvez voir la source de l'application.

Le fichier XML du menu est le même:

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

Activité de 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;
     }
}

Activité de 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);
    }

}

Une configuration supplémentaire était nécessaire sur l'application sherlock:

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

UPDATE: comme @ rudy-s l'a dit, avec la plus récente Android (api 18), j'ai vu qu'ils disposaient déjà d'une prise en charge intégrée de la barre d'action (appelée classe ActionBarCompat).

41
Bruno Mateus

Actionbar Sherlock est beaucoup plus avancé et beaucoup plus ambitieux que le simple projet de compatibilité Actionbar.

La compatibilité de la barre d’action peut être considérée comme un "exemple" ou comme un bon point de départ si vous souhaitez uniquement insérer une barre d’action au-dessus de votre application.

ActionBarSherlock s'appuie sur la bibliothèque de compatibilité et vous fournit (comme l'exemple de compatibilité de la barre d'action) une barre d'action sur les périphériques antérieurs à la version 3.0. De plus, il comporte des fonctionnalités supplémentaires non présentes dans le code ActionBar Compat. Cela inclut des fonctionnalités telles que, mais ne se limite pas à

  • setNavigationMode (pour les onglets et les fileuses dans la barre d'action)
  • Fragments de dialogue
  • Barre d’action contextuelle (CAB) est un menu reprenant la barre d’action, utilisé par exemple pour la sélection multiple (http://developer.Android.com/design/patterns/new-4-0.html). Ceci est un ICS feature (!)] Pour cela, une implémentation de la classe ActionMode (introduite dans l'API de niveau 11) devait être introduite dans la bibliothèque ActionbarSherlock.
  • Implémentations Fragment et FragmentActivity - comme les fragments peuvent implémenter le menu onCreateOptions, nous devons nous assurer que SupportMenuInflater est utilisé.
  • Deux thèmes pas très différents de Holo.Dark et Holo.Light (Theme.Sherlock, Theme.Sherlock.Light)
  • La fonctionnalité ICS "barre d’action divisée"

Le seul inconvénient que je vois dans l'utilisation d'ActionbarSherlock est que vous vous enfermez dans cette bibliothèque. Si, pour une raison quelconque, il s'éteint dans un avenir proche, vous devrez le maintenir vous-même (par exemple, si aucune implémentation de Jellybean ne se présente). C'est un problème (pas un problème énorme) puisque tous vos fragments sont étendus à SherlockFragemnt et à toutes vos activités. SherlockActivity.

39
Glenn Bech

Eh bien, l'implémentation de @Jake va bien au-delà de ce qu'était la version Actionbar. Pour être plus précis, Actionbar Compat n'est qu'un exemple de base sur la façon de prendre en charge toutes les applications avec une pseudo-barre d'action pour les versions antérieures à Honeycomb (API 13). Bien que leur cible soit la même barre d’action croisée compatible, ils ont une approche différente.

ActionbarCompat Aproach

Cette implémentation ne fait aucun usage de la bibliothèque de compatibilité Android support mais crée une classe de base appelée ActionBarActivity crée une seule instance de Helper this helper agit comme l’usine elle-même qui renvoie différentes implémentations pour les trois segments d’APIS, elle renvoie

La partie la plus intéressante se trouve dans ActionbarBaseHelper , car il contient le code le plus important, je vous suggère donc de comprendre cette classe et vous obtiendrez l’exemple complet.

Barre d'action Sherlock

Eh bien, c’est délicat d’abord, parce que, je ne suis pas l’auteur, peut-être que Jake peut expliquer cela plus avant, mais je vais essayer.

Tout comme les compatriotes Sherlock font différentes implémentations mais l’une est pour "Compat" et l’autre est native. Cela vous oblige à étendre à partir de SherlockActivity ou de SherlockFragmentActivity, car ces deux classes de base ont la méthode de distribution du ActionBar.

C'est un projet vaste et complexe, qui ne peut être expliqué dans un seul post. Vous suggérer de creuser autour de rapport Sherlock Github jeter un oeil et comme Jeff Atwood dit

enter image description here

26
Necronet
  • Je crois fermement que vous devriez utiliser ActionBarCompat pour tous les nouveaux projets qui souhaitent prendre en charge des périphériques plus anciens.

  • Il peut également être judicieux de migrer des projets existants. Continuez donc votre lecture pour savoir pourquoi vous devez migrer ou utiliser ActionBarCompat immédiatement et comment migrer des projets existants.

Pourquoi devriez-vous préférer ActionBarCompat à ActionBarSherlock?

Il y a de nombreuses raisons pour lesquelles vous devriez préférer ActionbarCompat à ActionbarSherlock.

  1. Tout d’abord, ce projet est de Google, fait partie de la bibliothèque de support et devrait donc supporter de nouvelles choses liées à la barre d’action en même temps que Google les publie avec Android.

  2. Une autre bonne raison est qu’elle soutient le Navigation Drawer pattern tout de suite, contrairement à ActionBarSherlock. Par conséquent, si vous souhaitez ajouter ce tiroir à un projet/une application existante, vous devez migrer.

  3. La dernière et importante est que le créateur d'ActionBarSherlock, Jake Wharton, a annoncé sur Google+ que le développement ultérieur d'ActionBarSherlock avait été arrêté. ActionBarSherlock 4.4 est la dernière version et il est possible que des correctifs soient apportés, mais il n’y aura pas de nouvelles fonctionnalités. Ainsi, si de nouvelles fonctionnalités sont incluses dans la barre d’activités, vous ne pourrez peut-être pas vous en tenir à la suite avec actionbarsherlock.

10
Stephen

Peut-être devrions-nous mettre à jour la réponse car Google a publié le support officiel de la barre d’action depuis API18 ?

le bloc ci-dessous provient de blog officiel à propos de ces deux bibliothèques:

Si vous utilisez une solution tierce (telle que ActionBarSherlock), vous devez envisager une mise à niveau pour plusieurs raisons:

  • Peut être tenu à jour en fonction de l'évolution de l'API Barre d'action.
  • Prise en charge intégrée de la navigation ancestrale.
  • Utilisation des classes framework Menu et MenuItem.
  • Continuez à utiliser la classe Fragment de la bibliothèque de support.
  • Prise en charge intégrée d'ActionBarDrawerToggle à utiliser avec DrawerLayout.
  • Port arrière de PopupMenu.

ActionBarSherlock est une bibliothèque solide et bien testée, qui sert très bien les développeurs depuis longtemps. Si vous l'utilisez déjà et que vous n'avez actuellement besoin d'aucun des éléments ci-dessus, il n'est pas nécessaire de migrer.

7
ruidge