如何检查导航抽屉是否打开?
How to check whether the navigation drawer is open?
我有一个带导航抽屉的 activity。下面是我的代码。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(dLayout.isDrawerOpen(GravityCompat.START)==true) {
dLayout.closeDrawers();
}
else
{
doExit();
}
}
return super.onKeyDown(keyCode, event);
}
private void doExit() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(
FirstSelection.this);
alertDialog.setPositiveButton("Yes", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
根据此代码,当用户按下后退按钮时,如果导航抽屉已打开,则关闭抽屉导航,否则将调用 doExit();
方法。但就我而言,其他条件工作正常,但是当我在抽屉打开时按下后退按钮时,整个应用程序关闭。我遵循了这段代码 How to detect if navigation drawer is open?
如有任何帮助,我们将不胜感激。
DrawerLayout
有方法 isDrawerOpen(listView)
returns true or false 我猜这对你有帮助
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
}
在 onBackPressed 中添加上面的代码
以下是在 Kotlin 中执行此操作的一般步骤。
初始化 DrawerLayout 视图
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
检查抽屉是否打开
if(drawerLayout.isDrawerOpen(GravityCompat.START)){
Log.d("Drawer","open")
}
如果您想在抽屉打开或关闭时自动执行操作,您可以执行以下操作。
在您的主 activity 中,创建一个内部 class,它是 DrawerLayout.DrawerListener 的子class。 DrawerLayout class 实现了 DrawerListener 接口。
inner class CustomDrawer : DrawerLayout.DrawerListener{
override fun onDrawerStateChanged(newState: Int) {
}
override fun onDrawerSlide(drawerView: View, slideOffset: Float) {
imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
}
override fun onDrawerClosed(drawerView: View) {
imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
}
override fun onDrawerOpened(drawerView: View) {
imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0)
}
}
把你的动作放在你想使用的函数中。在我的示例中,如果用户与导航抽屉交互,我将关闭软键盘。在你的 main activity:
中像这样声明 InputMethodManager
var imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
将自定义的 DrawerListener 添加到 drawerLayout(我把它放在 onCreate 方法中)
var drawerListener = CustomDrawer()
drawerLayout.addDrawerListener(drawerListener)
我有一个带导航抽屉的 activity。下面是我的代码。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if(dLayout.isDrawerOpen(GravityCompat.START)==true) {
dLayout.closeDrawers();
}
else
{
doExit();
}
}
return super.onKeyDown(keyCode, event);
}
private void doExit() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(
FirstSelection.this);
alertDialog.setPositiveButton("Yes", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
根据此代码,当用户按下后退按钮时,如果导航抽屉已打开,则关闭抽屉导航,否则将调用 doExit();
方法。但就我而言,其他条件工作正常,但是当我在抽屉打开时按下后退按钮时,整个应用程序关闭。我遵循了这段代码 How to detect if navigation drawer is open?
如有任何帮助,我们将不胜感激。
DrawerLayout
有方法 isDrawerOpen(listView)
returns true or false 我猜这对你有帮助
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
}
在 onBackPressed 中添加上面的代码
以下是在 Kotlin 中执行此操作的一般步骤。
初始化 DrawerLayout 视图
val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout)
检查抽屉是否打开
if(drawerLayout.isDrawerOpen(GravityCompat.START)){ Log.d("Drawer","open") }
如果您想在抽屉打开或关闭时自动执行操作,您可以执行以下操作。
在您的主 activity 中,创建一个内部 class,它是 DrawerLayout.DrawerListener 的子class。 DrawerLayout class 实现了 DrawerListener 接口。
inner class CustomDrawer : DrawerLayout.DrawerListener{ override fun onDrawerStateChanged(newState: Int) { } override fun onDrawerSlide(drawerView: View, slideOffset: Float) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } override fun onDrawerClosed(drawerView: View) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } override fun onDrawerOpened(drawerView: View) { imm.hideSoftInputFromWindow(drawerView?.getWindowToken(), 0) } }
把你的动作放在你想使用的函数中。在我的示例中,如果用户与导航抽屉交互,我将关闭软键盘。在你的 main activity:
中像这样声明 InputMethodManagervar imm: InputMethodManager = this.getSystemService(Activity.INPUT_METHOD_SERVICE)
将自定义的 DrawerListener 添加到 drawerLayout(我把它放在 onCreate 方法中)
var drawerListener = CustomDrawer() drawerLayout.addDrawerListener(drawerListener)