Определите, открывается ли NavigationDrawer или закрывается
Могу ли я определить, открывается или закрывается навигационный ящик? Я читал о isDrawerOpen()
а также isDrawerVisible()
методы, но они возвращают true, только если навигационная панель открыта или видна соответственно.
Я также читал о onDrawerSlide(View drawerView, float slideOffset)
метод, который вызывается, когда ящик движется. slideOffset
это плавающее значение между 0 и 1, указывающее, в каком положении находится ящик. Но даже это вызывается, когда ящик открывается и закрывается.
Что мне нужно сделать, это сделать что-то, только когда ящик открывается, но не закрывается, что-то говорит мне, что я должен использовать onDrawerSlide(View drawerView, float slideOffset)
метод, но я просто не могу понять, как проверить, открывается ли он и не закрывается.
Спасибо
2 ответа
Для отслеживания последнего значения вариант...
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) {}
});
Если вы используете ActionBar
ovveride ActionBarDrawerToggle
Дальнейшее чтение: слушайте события открытия и закрытия на developer.android.com
SetDrawerListener метод в настоящее время не рекомендуется. Новый способ сделать это - использовать метод addDrawerListener.
В Котлине:
Инициализировать DrawerLayout View
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
В своей основной деятельности создайте внутренний класс, который является подклассом DrawerLayout.DrawerListener. Класс DrawerLayout реализует интерфейс DrawerListener. Вы можете отслеживать изменение положения ящика в onDrawerSlide (версия ответа выше в Kotlin):
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 в drawerLayout (я поместил его в метод onCreate)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)