DrawerLayout 不适用于 Android 4.4 和 SurfaceView

Posted

技术标签:

【中文标题】DrawerLayout 不适用于 Android 4.4 和 SurfaceView【英文标题】:DrawerLayout not working with Android 4.4 & SurfaceView 【发布时间】:2014-01-07 15:57:28 【问题描述】:

今天我又经历了一个“机器人”时刻,这让我完全一无所知。

我有一个由 DrawerLayout 组成的应用程序,其中包括一个作为 SurfaceView (surfaceViewContainer) 容器的 RelativeLayout 和一个作为导航的第二个 ViewGroup(RelativeLayout 的子类)。

当应用程序启动时,在 onCreate 中我膨胀布局并将 SurfaceView 添加到 surfaceViewContainer。

在配备 4.1.2 的三星 S2 和配备 4.3 的 S3 上一切正常,我可以看到 SurfaceView 已绘制,我可以通过滑动手势或主页按钮打开和关闭抽屉。然后我在 android 4.4 上使用 Nexus 5 和 Nexus 10 进行了测试,在这两种设备上抽屉都不会出现。即使按下主页按钮也无济于事。

更奇怪的是:我可以在添加 SurfaceView 之前打开 Drawer,当我这样做时,即使在 Android 4.4 上添加 SurfaceView 之后,我也可以与 Drawer 进行交互,因此打开/关闭可以正常工作。

所以我的问题是:任何人以前经历过这样的事情或有一些建议或知道从 Android 4.3 到 4.4 可能发生了什么变化?!

ps:我已经在其他应用中成功使用了 DrawerLayout,只是没有使用 SurfaceView,所以我认为问题出在此处。

谢谢

【问题讨论】:

【参考方案1】:

您是否尝试过像这样在drawerLayour的drawerListener上使用onDrawerSlide实现

@Override
    public void onDrawerSlide(View drawerView, float slideOffset)
    
        super.onDrawerSlide(drawerView, slideOffset);
        mDrawerLayout.bringChildToFront(drawerView);
        mDrawerLayout.requestLayout();
    

【讨论】:

成功了!我有一个全屏 SurfaceView 渲染,滑入时抽屉不会动画,但这解决了它。谢谢! super.onDrawerSlide 无法解决..其他事情对我有用。 非常感谢老兄。你是为我做的。过去两天我一直在努力解决这个问题。重写 onDrawSlider 方法成功了。

以上是关于DrawerLayout 不适用于 Android 4.4 和 SurfaceView的主要内容,如果未能解决你的问题,请参考以下文章

android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕

安卓中的左或右拉框-DrawerLayout

安卓中的左或右拉框-DrawerLayout

安卓中的左或右拉框-DrawerLayout

Android 使用DrawerLayout快速实现侧滑菜单

DrawerLayout和NavigationView的简单实用