【问题标题】:Navigation Drawer with webview auto-closes after scrolling滚动后带有 webview 的导航抽屉自动关闭
【发布时间】:2014-01-27 21:42:37
【问题描述】:

我在 Navigation Drawer 上放了一个 webview; webview 显示有关当前 UI 的格式化文本,以便用户熟悉功能。

不幸的是,在 webview 上向上或向下滚动后(webview 的水平滚动被禁用),当我将手指从 webview 上移开后,导航抽屉会自行关闭!

如何防止导航抽屉在用户松开时自行关闭?

编辑: 其他发现...我已将 OnTouchListener() 附加到抽屉的布局中,除了返回 true 之外什么都不做。这可以防止在触摸导航抽屉上的空白区域时发生自动关闭。要了解这是如何完成的,请查看 http://android-er.blogspot.com/2014/01/android-drawerlayout-and-drawerlistener.html 并查看“实验性”评论。

不幸的是当用户没有在 webview 上完美地向上/向下滚动时,它不会阻止 Navigation Drawer 关闭。 例如,如果拖动的水平组件非常小,则在 webview 上上下滚动将关闭抽屉。

【问题讨论】:

    标签: android


    【解决方案1】:

    因此,防止抽屉过度关闭的(无忧)解决方案:一旦抽屉打开,将其锁定并让按钮触发 closeDrawer()。下面的代码显示了如何管理锁定/解锁状态。它不包括调用 closeDrawer() 的按钮,因为这是非常基本的。

    在 XML 中,DrawerLayout 的 id 是:

    <android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    

    在您的活动中,java 代码是:

    import android.support.v4.widget.DrawerLayout;
    
    public class MyActivity extends Activity implements DrawerLayout.DrawerListener
    {
    
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.layoutwithdrawer);
    
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    
            mDrawerLayout.setDrawerListener(this);
        }
    
        @Override
        public void onDrawerClosed(View arg0) {
            // allow swiping to open the drawer
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        }
    
        @Override
        public void onDrawerOpened(View arg0) {
            // disable swiping so that the drawer can't be closed by accident when scrolling through webview
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_OPEN);
        }
    
        @Override
        public void onDrawerSlide(View arg0, float arg1) {}
    
        @Override
        public void onDrawerStateChanged(int arg0) {}
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多