您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

DrawerLayout有时只能滑出来一点点的问题

时间:02-05来源:作者:点击数:

xml布局如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <FrameLayout
        android:id="@+id/menuLayout"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:layout_gravity="start"/>

</androidx.drawerlayout.widget.DrawerLayout>

Activity中不需要写什么代码,只需要加载这个布局即可,这样就会有侧滑菜单了,就是这么简单,所以我不想使用SlidingMenu这个开源的侧滑控件了,而且这个开源项目是很多年前的了,也没有更新,项目还是eclipse格式的,在AndroidStudio中会有问题,虽然我后面导入AndroidStudio解决了问题也可以使用了,但是最后还是决定使用DrawerLayout,必竟这个是Android官方的,而且使用更简单,但是就有一个问题,我们滑10次,总会有那么一两次菜单只能滑出来一点点就滑不动的情况,如下:

在这里插入图片描述

不怀疑我们的代码有问题,代码就是布局那点点的xml,简单到不行了,不可能有问题,于是百度、Google都没找到答案,似乎都没人遇到这个问题似的,还是说明大家都在用开源的一些侧滑控件,所以才没人问这个问题。或许是搜索的关键字不对,在换了几次关键字后,在更宽广的Google上最终找到了一些遇到此问题的文章,如下:

https://stackoverflow.com/questions/18029874/drawerlayout-getting-stuck-on-swipe

https://stackoverflow.com/questions/17896052/why-does-drawerlayout-sometimes-glitch-upon-opening

遇到问题也可以往Google那里提交,Google官方或许就会修复这个问题:

https://issuetracker.google.com/issues/37126887

在这个问题中,Google人员回复说会尽最大努力解决此问题,但是产品团队将工作用在优先级较高的错误上,可能无法处理该错误。 这是2019年6月27日的回复,直到现在该错误还是存在,都多少年了,这个错误还没解决,哎!

网上有一个解决方案,就是在主界面的根布局中加入可点击和可获取焦点的属性,如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:openDrawer="start"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true"
        android:focusable="true"/>

    <FrameLayout
        android:id="@+id/menuLayout"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        android:layout_gravity="start"/>

</androidx.drawerlayout.widget.DrawerLayout>

OK,这成功的解决了我的问题!希望对遇到此问题的朋友也有帮助!

后续:有人说DrawerLayout要用作根布局,这是不对的,经我实验不是根布局也可以的,在我所有的项目中基本上都会有一个BaseActivity,而BaseActivity已经加载了一个很简单的布局了,其他子Activity继承BaseActivity,所以我是不可能在BaseActivity的布局中加入DrawerLayout的,因为不是每个界面都需要菜单的。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门