当前位置: 首页 > 知识库问答 >
问题:

如何检测DrawerLayout开始打开?

穆锋
2023-03-14
mDrawerToggle = new ActionBarDrawerToggle(
        this,                 
        mDrawerLayout,        
        R.drawable.ic_drawer,  
        R.string.drawer_open,  
        R.string.drawer_close  
) {
    @Override
    public void onDrawerClosed(View view) {
        invalidateOptionsMenu(); 
        setActionBarMode(ActionBar.NAVIGATION_MODE_TABS);
    }

    @Override
    public void onDrawerOpened(View drawerView) {
        invalidateOptionsMenu(); 
        setActionBarMode(ActionBar.NAVIGATION_MODE_STANDARD);
    }

};
mDrawerLayout.setDrawerListener(mDrawerToggle);

以下是我尝试的:

  • OnClickListener设置为MDrawerLayoutonclick永远不会被调用
  • OnTouchListener设置为MDRAWERLayoutontouch从不调用
  • 研究了ActionBardrawerToggleDrawerLayout类。找不到类似ondrawerstartedopening的内容。

共有1个答案

鲜于煜祺
2023-03-14

有两种可能的方法可以做到这一点:

1)使用ondrawerslide(View drawerView,float slideOffset)回调

slideoffset从0更改为1。1表示它完全打开,0-关闭。

mDrawerToggle = new ActionBarDrawerToggle(
        this,                 
        mDrawerLayout,        
        R.drawable.ic_drawer,  
        R.string.drawer_open,  
        R.string.drawer_close  
) {

    @Override
    public void onDrawerSlide(View drawerView, float slideOffset) {
        if (slideOffset == 0
                && getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_STANDARD) {
            // drawer closed
            getActionBar()
                    .setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            invalidateOptionsMenu();
        } else if (slideOffset != 0
                && getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
            // started opening
            getActionBar()
                    .setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
            invalidateOptionsMenu();
        }
        super.onDrawerSlide(drawerView, slideOffset);
    }
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerToggle = new ActionBarDrawerToggle(
        this,                 
        mDrawerLayout,        
        R.drawable.ic_drawer,  
        R.string.drawer_open,  
        R.string.drawer_close  
) {
    @Override
    public void onDrawerStateChanged(int newState) {
        if (newState == DrawerLayout.STATE_SETTLING) {
            if (!isDrawerOpen()) {
                // starts opening
                getActionBar()
                        .setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
            } else {
                // closing drawer
                getActionBar()
                        .setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
            }
            invalidateOptionsMenu();
        }
    }
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
 类似资料:
  • 本文向大家介绍Android 打开关闭DrawerLayout,包括了Android 打开关闭DrawerLayout的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我下面的代码创建一个新数组,并将其发送到chat(jFrame)。 但是我需要修改此代码以使其工作,如果打开了聊天jframe,则不要打开新的jFrame。而是在chat jframe中打开新的选项卡。聊天框的代码是: 问题答案: 我想知道如果该窗口依赖于另一个窗口,那么是否不应该使用JDialogs而不是JFrames。 一种解决方案是使用类字段来保存对窗口(JFrame或JDial

  • 使用代码模板 如果使用离线工具如Sublime Text来开发的话,您需要按照如下步骤准备好开发环境: 一个包含 直接引用JS 我们还可以直接引用CDN上已经构建好的JS脚本,如下在HTML中添加一个 <script> 标签: <!-- Production Version, Minified --><script src="https://aframe.io/releases/1.1.0/afr

  • 在我的应用程序中,我使用了消息推送服务,但我的问题是,当我关闭应用程序时,通知会出现,但当我打开应用程序然后发送通知时,通知不会出现。请帮帮我。

  • 如果这在Flutter中很难实现,有没有人可以为这个功能建议一些其他的语言或代码? 谢谢!!

  • 我面临交易错误,例如: org . hibernate . lazyinitializationexception:无法延迟初始化角色集合:app。Parent.children,无法初始化代理-没有会话 这里在。 但我对方法有: 1个事务在上创建工厂并给实体管理器 1个事务在上创建实体 我希望能够测试我的Hibernate会话何时处于活动状态,这样我就可以检查它何时丢失以及丢失的原因。 谢谢!