我有什么方法可以确定导航抽屉是打开还是关闭?我已阅读有关isDrawerOpen()
和isDrawerVisible()
方法的信息,但只有在导航抽屉打开或分别可见时,它们才会返回true。
我还读到了关于抽屉移动时调用的onDrawerSlide(View drawerView, float slideOffset)
方法。 slideOffset
是0到1之间的浮动值,告诉抽屉现在处于哪个位置。但是当抽屉打开并关闭时,即使这个被调用。
我需要做的是,只在抽屉打开时做某事而不是在关闭时做某事,有些东西告诉我必须使用onDrawerSlide(View drawerView, float slideOffset)
方法,但我无法弄清楚如何检查如果它正在打开而且没有关闭。
谢谢
答案 0 :(得分:14)
跟踪最后一个值是一个选项......
drawerLayout.setDrawerListener(new DrawerListener() {
private float last = 0;
@Override
public void onDrawerSlide(View arg0, float arg1) {
boolean opening = arg1>last;
boolean closing = arg1<last;
if(opening) {
Log.i("Drawer","opening");
} else if(closing) {
Log.i("Drawer","closing");
} else {
Log.i("Drawer","doing nothing");
}
last = arg1;
}
@Override public void onDrawerStateChanged(int arg0) {}
@Override public void onDrawerOpened(View arg0) {}
@Override public void onDrawerClosed(View arg0) {}
});
答案 1 :(得分:0)
如果您使用ActionBar
覆盖ActionBarDrawerToggle
进一步阅读: Listen for Open and Close Events on developer.android.com
答案 2 :(得分:0)
setDrawerListener方法现在为deprecated。完成此操作的新方法是使用addDrawerListener方法。
在科特林:
初始化DrawerLayout视图
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
在您的主要活动中,创建一个内部类,该内部类是DrawerLayout.DrawerListener的子类。 DrawerLayout类实现DrawerListener接口。您可以在onDrawerSlide(上面答案的科特林化版本)中跟踪变化的抽屉位置:
inner class CustomDrawer : DrawerLayout.DrawerListener{
override fun onDrawerStateChanged(newState: Int) {
}
var last: Float = 0f
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
var opening: Boolean = slideOffset>last
var closing: Boolean = slideOffset<last
if(opening) {
Log.i("Drawer","opening")
Log.d("Last",last.toString())
} else if(closing) {
Log.i("Drawer","closing")
Log.d("Last",last.toString())
} else {
Log.i("Drawer","doing nothing")
Log.d("Last",last.toString())
}
}
override fun onDrawerClosed(drawerView: View) {
}
override fun onDrawerOpened(drawerView: View) {
}
}
将您的自定义DrawerListener添加到抽屉布局(我将其放在onCreate方法中)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)