web-dev-qa-db-fra.com

Les modes de navigation de la barre d'action sont obsolètes dans Android L

En jetant un coup d'œil au rapport de l'API pour l'aperçu "L" d'Android, toutes les méthodes liées aux modes de navigation de la classe ActionBar (telles que setNavigationMode(), addTab(), selectTab(), & c). sont maintenant obsolètes.

La documentation explique:

Les modes de navigation de la barre d'action sont obsolètes et ne sont pas pris en charge par inline barres d'action de la barre d'outils. Pensez à utiliser d'autres modèles de navigation courants au lieu.

Quel est le supposé remplacement?

En outre, les "barres d’action intégrées dans la barre d’outils" sont-elles un nouveau concept? Je ne pense pas en avoir entendu parler auparavant.

200
matiash

La nouvelle Android Design Support Library ajoute TabLayout , fournissant ainsi une implémentation des onglets qui correspond à la consignes de conception de matériau des onglets . Vous trouverez un aperçu complet de la mise en œuvre des onglets et de ViewPager dans cette vidéo

Maintenant obsolète: Le PagerTabStrip fait partie de la bibliothèque de support (depuis un certain temps) et sert de remplaçant 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 ce Dev Octets vidéo .

177
ianhanniballake

Maintenant que les documents Android 5.0 sont disponibles, nous avons la documentation officielle du widget Barre d'outils :

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 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 framework, une barre d'outils Peut être placée à n'importe quel niveau d'imbrication dans une vue Hiérarchie}.

Un widget Toolbar peut également être utilisé pour remplacer la barre d'action:

Une application peut choisir de désigner une barre d’outils comme barre d’action pour une activité utilisant la méthode setActionBar().

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

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

Android 5.0 introduit un nouveau widget Barre d'outils. Ceci est une généralisation du modèle ActionBar mais vous donne beaucoup plus de contrôle et souplesse d'utilisation. La barre d'outils est une vue dans votre hiérarchie au même titre que tout autre, facilitant l’entrelacement avec le reste de vos vues, animer, réagir aux événements de défilement.

20
matiash

Il semble qu'ils aient ajouté une nouvelle classe nommée Android.widget.Toolbar qui étend ViewGroup. Ils ont également ajouté une nouvelle méthode setActionBar(Toolbar) dans Activity. Je ne l'ai pas encore testée, mais il semblerait que vous puissiez envelopper toutes sortes de vues TabWidgets, Spinners ou personnalisées dans une Toolbar et l'utiliser comme barre d'action.

13
Kuno

Le nouveau Toolbar ne peut pas être utilisé pour gonfler plusieurs objets de ligne. Il est donc impossible d'y ajouter des onglets.
Si vous voulez utiliser un Toolbar comme un TabWidget, vous pouvez y insérer des objets de tabulation, mais uniquement avec l'ancien style Holo.

Ici il existe une bibliothèque personnalisée qui utilise la v7 Toolbar comme TabWidget avec les nouvelles animations Material Design, mais utilise les mêmes méthodes que l'ancien ActionBar Tabs. Vous pouvez donc y associer votre ViewPager.

4
NeoKree

Pour "remplacement" de ActionBar obsolète, j'ai changé le type de mes variables de type ActionBar en PagerTabStrip, comme indiqué dans (ancien code dans le commentaire):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Un 'remplacement' pour .selectTab (tabindex) de ~ actionBar consistait à utiliser la méthode .setCurrentItem (int) de mon ViewPager associée, comme ceci (ancien code dans un commentaire):

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

J'espère que c'est utile.

2
applesauced

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

Dans le fichier XML de mise en page qui contient le viewpager, ajoutez un 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 de page, 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;
}
1
AR Ross

Je pense que BottomNavigationActivity peut être utilisé pour remplacer des fragments lorsque vous avez trois à cinq écrans d’égale importance.

Vous remarquerez qu'il existe un assistant pour cela dans Android Studio. Attention, Android Studio a tendance à produire un code de plaque de chaudière excessivement complexe.

Vous trouverez un tutoriel ici: https://Android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-Android-75e4efb8105f

Un autre didacticiel de qualité est disponible sur Android Hive ici: https://www.androidhive.info 2017/12/Android-working-with-bottom-navigation/

0
Andrew S

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

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 les adapter à votre situation particulière. Par exemple, vous ne souhaitez peut-être pas créer manuellement les onglets dans le même style que le didacticiel exoguru.com. 

0
kip2

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

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