25

我在一个活动中有一个滑动抽屉菜单,它有一个带有一些选项卡的操作栏。

我想让滑动抽屉滑过标签,而不是在它们下面。

这就是现在的样子……

操作栏选项卡下的滑动菜单

关于如何做到这一点的任何想法?

注意:我知道我可能在这里打破了一些约定和 UI 模式,如果它根本不起作用,我会看看替代方案。但我想先让这个工作。

编辑:请参阅下面的谷歌播放音乐应用程序的屏幕截图,它完全符合我的需要。请参阅下面的@CommonsWare 的回答,他确实同意我可能违反约定。但是考虑到 Play Music 应用程序,它可能也不是那么罕见。

正确导航,标签正确滑动

4

10 回答 10

22

您可以使用以下库来获得类似于 Google play 音乐应用的导航模型。

  • ActionBarSherlock (github)
  • 嵌套片段(github)
  • PagerSlidingTabStrip (github)
  • NavigationDrawer(Android 开发者网站)
  • 最新支持 v4 库

我在 github 上创建了一个带有 Tab Strip Example 的项目 Navigation Drawer,看看它。

下面是它的截图。

导航抽屉页面滑动标签条

于 2013-08-06T11:47:37.260 回答
11

关于如何做到这一点的任何想法?

执行以下任一操作:

  • 切换到操作栏选项卡,可能切换到ViewPager选项卡式指示器(PagerTabStrip来自TabPageIndicatorViewPageIndicator)

  • 查看现有的第三方抽屉实现是否尚未更新到新的 UI 标准

  • 分叉DrawerLayout并修改它以适应

  • 从头开始滚动你自己的导航抽屉

我知道我可能会在这里打破一些约定和 UI 模式

正确

于 2013-06-05T20:54:18.830 回答
3

还要检查这个库http://www.androidviews.net/2013/04/pager-sliding-tabstrip/ 这家伙做得很好。您可以将它与导航抽屉一起使用,并且效果很好。

于 2013-08-06T11:17:44.183 回答
3

最后,在此博客http://www.paulusworld.com/technical/android-navigationdrawer-sliding-tabs中实现滑动选项卡上的导航抽屉的简洁方法

于 2014-11-06T06:13:30.163 回答
1

这可以在没有第三方库的情况下完成。查看 Google 的滑动标签示例

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

另外,看看这个很棒的链接: http : //manishkpr.webheavens.com/android-sliding-tabs-example/ 对我来说就像一个魅力。:)

于 2014-06-18T06:49:28.173 回答
0

我遇到了同样的问题,但我找到的唯一解决方案是在内部片段(而不是 fragmentActivity)中使用选项卡。我不知道这是否是最好的解决方案,我唯一的问题是设计这个标签,其余的,它工作得很好

于 2013-07-28T16:47:48.577 回答
0

播放音乐不使用标准的 ActionBar.Tab 然后你可以通过扩展 Horizo​​ntalScrollView 并与 ViewPager 一起使用来实现自己的标签容器

于 2014-08-10T18:04:38.990 回答
0

我设法通过在 OnDrawerClosed 和 onDrawerOpened 函数中设置 navigationMode 来实现这一要求。这是一个临时修复,因为选项卡实际上不会立即消失。

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

                    }

如果您有一些带有标签的片段,而其他没有标签的片段,请不要忘记在没有标签的片段的 CreateView 上删除标签。

 getActionBar().removeAllTabs();
于 2014-05-20T07:51:05.873 回答
0

Actionbar Navigaton Drawer 和 SwipeTabs 不能同时使用。您应该通过简单的 Tabhosts 使用 Actionbar 和 swipetabs 来实现 Navigation Drawer。您可以将 Tabhost 用于选项卡,并将片段用于每个选项卡的内部视图。片段应该通过 viewpager 来提供滚动/滑动效果。通过它们的方法将选项卡和 viewpager 相互连接

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

于 2014-07-13T22:55:19.283 回答
0

我在抽屉的片段内使用了标签。我解决了这个问题

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

在方法onDrawerClosed()getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);onDrawerOpend()

我希望这能帮到您。

于 2016-03-10T07:49:39.793 回答