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的,因为不是每个界面都需要菜单的。