模仿youtube / gmail应用程序的导航抽屉

时间:2013-08-21 10:22:58

标签: android actionbarsherlock android-actionbar slidingmenu navigation-drawer

背景

最近几个月,谷歌发布了Youtube app导航抽屉(AKA滑动菜单)。

它有许多很酷的功能,我希望在我正在使用的应用程序上。

功能是:

  1. 触摸任何地方开始滑动。

  2. 切换模式时,在操作栏的“向上”按钮上移动图标。

  3. 滑动菜单时,内容区域(右侧区域,而不是菜单本身)停留而不是滚动。

  4. 操作栏停留而不是滚动。

  5. 内容区域(右侧区域,而不是菜单本身)在滚动时更改其颜色,而不是菜单本身。

  6. 这里是截图,显示我在说什么:

    滑动之前

    before

    滑动后

    after

    目前,我知道有两个主要的图书馆负责使用导航抽屉:

    问题

    官方库和slidingMenu库都没有像youtube应用程序那样组合所有这些功能。

    例如,官方图书馆没有能力#1(这就是我发布this thread的原因),所以我使用了slidingMenu库。

    然而,slidingMenu库没有(或者它是)能力#2和#3。

    这两个库都没有足够的文档/示例可以做什么,因此很难使用它们或为它们添加新功能。

    我尝试了什么

    目前,我使用了slidingMenu库,所以这是我准备slideMenu的代码:

    activity.setBehindContentView(slidingMenuRootView);
    mSlidingMenu = activity.getSlidingMenu();
    mSlidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
    mSlidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
    mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    mSlidingMenu.setFadeEnabled(true);
    mSlidingMenu.setFadeDegree(1.0f);
    mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    activity.setSlidingActionBarEnabled(false);
    

    问题

    我如何让slideMenu(或导航抽屉)在youtube应用程序中表现得像,这意味着我提到的所有功能组合在一起?


    可能的解决方案

    编辑:使用menuDrawer library(github链接here),我已经成功实现了我提到的所有功能。这是一个示例代码:

    public class ActionBarSherlockSample extends SherlockActivity {
    
        private MenuDrawer mDrawer;
    
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getSupportActionBar();
            mDrawer = MenuDrawer.attach(this, MenuDrawer.Type.OVERLAY);
            final TextView menuView = new TextView(this);
            menuView.setTextColor(0xFFFFFFFF);
            menuView.setText("As the drawer opens, the drawer indicator icon becomes smaller.");
            menuView.setGravity(Gravity.CENTER);
            mDrawer.setMenuView(menuView);
            mDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_FULLSCREEN);
            mDrawer.setOnDrawerStateChangeListener(new OnDrawerStateChangeListener() {
    
                @Override
                public void onDrawerStateChange(final int oldState, final int newState) {
                    Log.d("AppLog", "oldState:" + oldState + " newState:" + newState);
                }
    
                @Override
                public void onDrawerSlide(final float openRatio, final int offsetPixels) {
                }
            });
            final TextView contentView = new TextView(this);
            contentView
                    .setText("This sample uses ActionBarSherlock to display an ActionBar on older platforms. The drawer indicator, "
                            + "as per the design guidelines, is visible in the top left corner.");
            contentView.setGravity(Gravity.CENTER);
            mDrawer.setContentView(contentView);
            mDrawer.setSlideDrawable(R.drawable.ic_drawer);
            mDrawer.setDrawerIndicatorEnabled(true);
        }
    
        @Override
        public boolean onOptionsItemSelected(final MenuItem item) {
            switch (item.getItemId()) {
            case android.R.id.home:
                mDrawer.toggleMenu();
                break;
            }
            return super.onOptionsItemSelected(item);
        }
    }
    

1 个答案:

答案 0 :(得分:1)

使用此MenuDrawer

幻灯片菜单实现,允许用户在您应用中的视图之间导航。

特点:

  • 菜单可以沿着所有四个边缘定位。
  • 支持附加始终可见,不可拖动的菜单,这在平板电脑上很有用。
  • 菜单可以包含内容和整个窗口。
  • 允许通过拖动边缘,整个屏幕或根本不打开抽屉。
  • 可用于XML布局。
  • 显示当前可见哪个屏幕的指示