web-dev-qa-db-fra.com

Faire glisser DrawerLayout sur la barre d’action

Dans une activité, un menu à tiroirs coulissants comporte une barre d’action avec des onglets. 

J'aimerais que le tiroir coulissant glisse sur les languettes, pas en dessous. 

Voici à quoi cela ressemble en ce moment ...

Sliding menu under action bar tabs

Des idées sur la façon dont cela pourrait être fait?

Remarque: Je comprends que je vais peut-être enfreindre certaines conventions et certains modèles d'interface utilisateur. Si cela ne fonctionne pas du tout, j'examinerai d'autres solutions. Mais j'aimerais que cela fonctionne en premier.

EDIT: Voir la capture d'écran ci-dessous de l'application Google Play Music qui répond exactement à mes besoins. Voir la réponse de @ CommonsWare ci-dessous, où il convient que je pourrais enfreindre la convention. Mais étant donné l'application Play Music, il se peut que ce ne soit pas tout à fait aussi rare. 

Proper navigation with tabs sliding correctly

25
Archit

Des idées sur la façon dont cela pourrait être fait?

Faites l'une des choses suivantes:

  • Abandonnez les onglets de la barre d'action, éventuellement vers ViewPager et un indicateur à onglets (PagerTabStrip, TabPageIndicator de ViewPageIndicator)

  • Vérifier si une implémentation de tiroir tiers existante n'a pas encore été mise à jour vers les nouvelles normes d'interface utilisateur

  • Fork DrawerLayout et le modifier pour l'adapter

  • Rouler votre propre tiroir de navigation à partir de zéro

Je comprends que je vais peut-être enfreindre certaines conventions et modèles d'interface utilisateur ici.

Correct .

11
CommonsWare

vous pouvez utiliser les bibliothèques ci-dessous pour obtenir un modèle de navigation similaire à celui de l'application Google Play Music.

  • ActionBarSherlock (github)
  • fragments imbriqués (github)
  • PagerSlidingTabStrip (github)
  • NavigationDrawer (site de développement Android)
  • Dernière bibliothèque Support v4 

J'ai créé un projet Navigation Drawer with Tab Strip Example sur github, regardez-le. 

Ci-dessous est la capture d'écran de celui-ci.

Navigation-drawer-page-sliding-tab-strip

22
Balaji

Vérifiez également cette bibliothèque http://www.androidviews.net/2013/04/pager-sliding-tabstrip/ Le gars a fait un excellent travail. Vous pouvez l'utiliser avec un tiroir de navigation et cela fonctionne parfaitement.

3
alecnash

Enfin, une façon propre d’atteindre le tiroir de navigation sur les onglets coulissants de ce blog http://www.paulusworld.com/technical/Android-navigationdrawer-sliding-tabs

3
user2814778

Cela peut être fait SANS une bibliothèque tierce. Consultez les exemples d'onglets coulissants de Google.

     SlidingTabsBasic:   http://developer.Android.com/samples/SlidingTabsBasic/project.html
     SlidingTabsColors:  http://developer.Android.com/samples/SlidingTabsColors/project.html

Aussi, consultez ce lien génial: http://manishkpr.webheavens.com/Android-sliding-tabs-example/ A travaillé comme un charme pour moi :)

1
user3316561

Actionbar Navigaton Drawer et SwipeTabs ne peuvent pas être utilisés simultanément. Vous devez implémenter Navigation Drawer en utilisant Actionbar et swipetabs par Tabhosts. Vous pouvez utiliser Tabhost pour les onglets et utiliser des fragments pour la vue interne de chaque onglet. Les fragments doivent être utilisés via viewpager pour fournir un effet de défilement/balayage. Reliez les onglets et le viewpager avec leurs méthodes

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >

<TabHost
    Android:id="@+id/tabHost"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent" >

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical" >

        <HorizontalScrollView
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:fillViewport="true"
            Android:scrollbars="none" >

            <TabWidget
                Android:id="@Android:id/tabs"
                Android:layout_width="wrap_content"
                Android:layout_height="wrap_content" >
            </TabWidget>
        </HorizontalScrollView>

        <FrameLayout
            Android:id="@Android:id/tabcontent"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent" >

            <Android.support.v4.view.ViewPager
                Android:id="@+id/viewPager_home"
                Android:layout_width="match_parent"
                Android:layout_height="match_parent" />
        </FrameLayout>
    </LinearLayout>
</TabHost>

0
FAK

J'ai utiliser des onglets à l'intérieur du fragment de tiroir ..__ Je résous ce problème 

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

dans onDrawerClosed() et getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); dans onDrawerOpend(), méthode.

J'espère que cela t'aidera.

0
Jinal Rathod

Écouter de la musique n'utilise pas ActionBar.Tab .__ standard. Ensuite, vous pouvez implémenter votre propre conteneur d'onglets en étendant HorizontalScrollView Et en travaillant avec ViewPager.

0
tarn

J'ai réussi à répondre à cette exigence en définissant le mode de navigation dans les fonctions OnDrawerClosed et onDrawerOpened. C'est un correctif temporaire puisque les onglets ne disparaissent pas immédiatement. 

  public void onDrawerClosed(View view) {
          getActionBar().setTitle(mTitle);
          if(getActionBar().getTabCount()>0) //Add tabs when the fragment has it
          getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);               
                        ...
                    }

   public void onDrawerOpened(View drawerView) {
            getActionBar().setTitle(mDrawerTitle);
            getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);              
                    ..

                    }

Si vous avez des fragments avec des onglets, et d'autres sans, n'oubliez pas de supprimer les onglets onCreateView du fragment qui n'a pas d'onglets. 

 getActionBar().removeAllTabs();
0
user2814778

J'ai eu le même problème, mais la seule solution que j'ai trouvée consistait à utiliser des onglets à l'intérieur du fragment interne (pas fragmentActivity). Je ne sais pas si c'était la meilleure solution, le seul problème que j'avais était de coiffer ces onglets, pour le reste, ça fonctionne parfaitement

0
xgc1986