Les modes de navigation de la barre d'actions sont déconseillés dans Android L


203

Jeter un oeil à l'API rapport de diff pour la prévisualisation « L » Android, je vois que toutes les méthodes liées aux modes de navigation dans la ActionBarclasse ( par exemple setNavigationMode(), addTab(), selectTab(), etc.). sont désormais obsolètes.

La documentation explique:

Les modes de navigation de la barre d'actions sont déconseillés et ne sont pas pris en charge par les barres d'actions de la barre d'outils en ligne. Envisagez plutôt d'utiliser d'autres modèles de navigation courants.

Quel est le remplacement supposé?

En outre, les «barres d'action de la barre d'outils en ligne» sont-elles un nouveau concept? Je ne pense pas en avoir entendu parler auparavant.


Où avez-vous trouvé les documents pour l'aperçu L?
Kuno

8
@KlassenK Il n'est pas encore intégré dans la documentation principale, mais vous pouvez le télécharger sur developer.android.com/preview/reference.html
matiash

Merci pour le lien vers les documents!
Robert Karl

Pour setNavigationList, qu'avez-vous utilisé
Lion789

1
@ShirishHerwade Oui, car il a été fusionné dans la documentation principale lors de la sortie d'Android 5.0. Dans tous les cas, vous pouvez maintenant trouver l'avis de dépréciation dans developer.android.com/reference/android/app/…
matiash

Réponses:


179

La nouvelle bibliothèque de support de conception Android ajoute TabLayout , fournissant une implémentation d'onglets qui correspond aux directives de conception des matériaux pour les onglets . Une procédure pas à pas complète sur la façon d'implémenter des onglets et ViewPagerpeut être trouvée dans cette vidéo

Maintenant obsolète: le PagerTabStrip fait partie de la bibliothèque de support (et l'a été depuis un certain temps) et sert de remplacement direct. Si vous préférez les nouveaux onglets de style Google Play, vous pouvez utiliser la bibliothèque PagerSlidingTabStrip ou modifier l'un des exemples fournis par Google SlidingTabsBasic ou SlidingTabsColors comme expliqué dans cette vidéo Dev Bytes .


8
Il s'agit d'un remplacement direct en mode portrait, avec l'avantage de faciliter l'utilisation d'un en-tête de type matériel étendu. Cependant, en mode paysage, les onglets ActionBar remontent automatiquement dans la barre d'action elle-même, libérant ainsi une zone d'écran importante. Quelqu'un connaît-il un moyen propre de gérer cela avec la bibliothèque de support?
ehartwell

9
Le document du développeur indique toujours l'utilisation de l'onglet Barre d'actions. Simlpy pas encore mis à jour? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai

3
Il s'agit d'un remplacement pour NAVIGATION_MODE_TABS mais pas pour NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTest beaucoup plus facile, étant donné que tout ce qui a été fait était d'ajouter un Spinner et des aides de rappel.
ianhanniballake

2
À quoi sert le remplacement NAVIGATION_MODE_LIST? Le mien le déclare obsolète ...
Sauron

20

Maintenant que les documents Android 5.0 sont disponibles, nous avons la documentation officielle du widget Toolbar :

Une barre d'outils standard à utiliser dans le contenu de l'application.

Une barre d'outils est une généralisation des barres d'action à utiliser dans les dispositions d'application. Alors qu'une barre d'action fait traditionnellement partie du décor de fenêtre opaque d'une activité contrôlée par le cadre, une barre d'outils peut être placée à n'importe quel niveau arbitraire d'imbrication dans une hiérarchie de vues .

Un Toolbarwidget peut également être utilisé pour remplacer la barre d'actions:

Une application peut choisir de désigner une barre d'outils comme barre d'action pour une activité à l'aide de la setActionBar()méthode.

La dépréciation des onglets dans la barre d'actions est probablement due à cela, car les barres d'outils ne peuvent pas contenir d'onglet elles-mêmes.

En outre, il est disponible pour les versions Android précédentes via la bibliothèque compatible avec les applications. Voir cet article de Chris Banes pour plus d'informations. Un extrait:

Android 5.0 introduit un nouveau widget de barre d'outils. Il s'agit d'une généralisation du modèle ActionBar, mais vous donne beaucoup plus de contrôle et de flexibilité dans son utilisation. La barre d'outils est une vue de votre hiérarchie comme les autres, ce qui facilite l'entrelacement avec le reste de vos vues, l'animation, la réaction aux événements de défilement.


53
"beaucoup plus de contrôle et de flexibilité" n'est agréable que s'il existe des paramètres par défaut raisonnables et faciles à utiliser. Si quelque chose est flexible mais que vous avez besoin de 20 lignes ici et là pour le faire fonctionner, je ne considère pas cela comme une victoire ...
TWiStErRob

1
@TWiStErRob Je suis d'accord. Soulignez le sien, pas le mien :)
matiash

6
@TWiStErRob Je ressens la même chose ... Google vaut mieux faire attention, ce genre d'activité me rappelle l'ancien Microsoft
Sauron

13

Il semble qu'ils aient ajouté une nouvelle classe nommée android.widget.Toolbarqui s'étend ViewGroup. Ils ont également ajouté une nouvelle méthode setActionBar(Toolbar)dans Activity. Je ne l' ai pas encore testé, mais il semble que vous pouvez envelopper toutes sortes de TabWidgets, Spinnersou des vues personnalisées dans un Toolbaret l' utiliser comme votre actionbar.


1
Quelqu'un peut-il partager s'il a essayé quelque chose avec le widget de la barre d'outils ou sait comment cela doit fonctionner? Est-il également inclus dans le package de compatibilité?
Sandra


1
Merci beaucoup pour le lien ... alors maintenant, si je veux développer une application qui serait conforme aux nouvelles directives matérielles, je devrais probablement attendre que la barre d'outils soit disponible, car si j'utilise la barre d'action, j'utiliserais tout qui est obsolète ..?
Sandra

1
L'ActionBar sera toujours un modèle de conception standard. Seuls les modes de navigation seront dépréciés (Tabs ou Spinner). Voir developer.android.com/guide/topics/ui/actionbar.html#Tabs et developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
Je pense que cela est lié à la question .. l'apk de la nouvelle application i / o 2014 est disponible en téléchargement, et comme vous pouvez le voir sur plus.google.com/+RomanNurik/posts/PD6MS3feXTT , il existe de nombreux styles de barre d'outils utilisés . Il suffit d'attendre le code source et de l'explorer ensuite :(
Sandra

4

Le nouveau Toolbarne peut pas être utilisé pour gonfler plusieurs objets ligne, il est donc impossible d'y ajouter des tabulations.
Si vous souhaitez utiliser un Toolbarcomme un, TabWidgetvous pouvez y insérer des objets Tab, mais uniquement avec l'ancien style Holo.

Ici, il existe une bibliothèque personnalisée qui utilise la v7 Toolbarcomme TabWidgetavec les nouvelles animations Material Design, mais elle utilise les mêmes méthodes que l'ancienne ActionBar Tabs, vous pouvez donc y attacher votre ViewPager.


3

Pour le «remplacement» d'ActionBar obsolète, j'ai changé le type de mes variables de type ActionBar en PagerTabStrip, selon (ancien code en commentaire):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Un «remplacement» du .selectTab (tabindex) de ~ actionBar consistait à utiliser la méthode .setCurrentItem (int) de mon ViewPager associé, comme ceci (ancien code en commentaire):

/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);

J'espère que cela vous sera utile.


1

J'ai eu le même problème et cette solution me convenait très bien:

Dans le fichier xml de mise en page qui contient le viewpager, ajoutez le PagerTabStrip comme indiqué:

<android.support.v4.view.PagerTabStrip
    android:id="@+id/pager_tab_strip"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:background="#996633"
    android:textColor="#CCCCCC"
    android:paddingTop="5dp"
    android:paddingBottom="5dp" />

Pour contrôler les titres des pages, ajoutez une instruction switch à votre fichier ViewPager:

@Override
public CharSequence getPageTitle(int position)
{
    switch (position)
    {
    case 0:
        return "Page 1";

    case 1:
        return "Page 2";

    case 2:
        return "Page 3";

    }

    return null;
}

0

FragmentTabHost est également une option.

Ce code provient du site du développeur Android:

/**
 * This demonstrates how you can implement switching between the tabs of a
 * TabHost through fragments, using FragmentTabHost.
 */
public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_tabs);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
            FragmentStackSupport.CountingFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
            LoaderCursorSupport.CursorLoaderListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
            LoaderCustomSupport.AppListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
            LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
    }
}

1
Voici un tutoriel qui inclut cette réponse, donc cela pourrait aider quelqu'un skholingua.com/android-basic/user-interface/compositeitems/…
Dejan

0

J'ai trouvé ces didacticiels utiles lors de la création d'une barre d'action (maintenant la `` barre d'outils '' - argh) qui prend en charge les onglets coulissants avec Material Design:

https://www.youtube.com/watch?v=Fl0xMuo10yA

http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html

Vous devez en quelque sorte synthétiser ces ressources pour qu'elles correspondent à votre situation particulière. Par exemple, vous ne souhaiterez peut-être pas créer manuellement les onglets dans le même style que le didacticiel exoguru.com.


Le deuxième lien est mort.
jcaruso

@jcaruso ce n'est pas ma faute car ce domaine semble avoir expiré. La vidéo youtube est toujours d'actualité
kip2

1
@ kip2 Je suis d'accord, ce n'est pas de ta faute. Cependant, je suggère, comme tout le monde le suggère, d'éviter d'utiliser des liens pour expliquer les réponses à cause de ce problème.
jcaruso

0

Eh bien pour moi de gérer la barre d'outils de navigation obsolète en utilisant le widget appcompat de la barre d'outils v7.

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });

0

Je pense que le remplacement approprié lorsque vous avez trois à cinq écrans d'égale importance est le BottomNavigationActivity, cela peut être utilisé pour changer de fragments.

Vous remarquerez qu'un assistant existe pour cela dans Android Studio, faites attention cependant car Android Studio a tendance à produire un code de plaque de chaudière trop complexe.

Un tutoriel peut être trouvé ici: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Un autre tutoriel de qualité peut être trouvé sur Android Hive ici: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.