Android 按下键盘的“后退”按钮时,继续显示popupWindow
我正在开发一个Android应用程序,我设计了一个弹出窗口,通过替换活动中的软键盘来显示一些视图。popupWindow包含一个searchView。当我点击一个按钮时,它显示弹出窗口,软键盘被隐藏。现在,当popupWindow中的searchView获得焦点时,我调用该方法: popupWindow.setFocusable(真) 显示键盘,以便用户可以在searchView中开始键入。当searchView处于焦点且软键盘打开时,按back键同时关闭searchView和popupWindow 为了解决这个问题,我创建了一个自定义搜索视图,并覆盖了方法dispatchKeyEventPreIme,如下所示Android 按下键盘的“后退”按钮时,继续显示popupWindow,android,popupwindow,Android,Popupwindow,我正在开发一个Android应用程序,我设计了一个弹出窗口,通过替换活动中的软键盘来显示一些视图。popupWindow包含一个searchView。当我点击一个按钮时,它显示弹出窗口,软键盘被隐藏。现在,当popupWindow中的searchView获得焦点时,我调用该方法: popupWindow.setFocusable(真) 显示键盘,以便用户可以在searchView中开始键入。当searchView处于焦点且软键盘打开时,按back键同时关闭searchView和popupWind
public class CustomSearchView extends SearchView {
Context context;
AppConstant mAppConst;
public CustomSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
clearFocus();
}
return super.dispatchKeyEventPreIme(event);
}
}
当按下后退按钮时,我已从searchView中清除了焦点,但我不知道如何防止弹出窗口关闭
在活动中这样做。如果显示popupWindow,则“后退”按钮将不起任何作用
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
// do nothing
} else {
super.onBackPressed();
}
}
您还可以使用此功能,以便在弹出窗口外单击时,它不会关闭
popupWindow.setOutsideTouchable(false);
///更新
尝试更改此选项:
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
clearFocus();
return false;
} else {
return super.dispatchKeyEventPreIme(event);
}
}
这是我尝试过的,它成功了 在onCreate()中: 确保在活动中包含以下内容:
@Override
public void onBackPressed() {
if (popupWindow != null && popupWindow.isShowing()) {
Toast.makeText(context, "Activity Back Pressed - PopupWindow showing!", Toast.LENGTH_SHORT).show();
} else {
super.onBackPressed();
}
我的XML布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.package.name.CustomSearchView
android:layout_width="match_parent"
android:id="@+id/customSearchView"
android:background="@android:color/black"
android:layout_height="match_parent"></com.package.name.CustomSearchView>
</LinearLayout>
执行此实现时,不会调用CustomSearchView的dispatchKeyEventPreIme
,但会调用活动的OnBackPressed()
如您所见,当按下后退按钮时,我会放置一个
吐司,它每次都会调用。试试看。它不会关闭弹出窗口。我已经用下面的方法完成了<代码>弹出窗口.setBackgroundDrawable(新的BitmapDrawable());popup.setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入状态始终可见);popup.setOutsideTouchable(假)当我按下软键盘上的后退按钮时,活动中的code>OnBackPressed没有被调用,因此我在dispatchKeyEventPrime中创建了自定义SearchView和检测后退按钮,但我没有任何方法可以停止弹出窗口。如果你知道如何实现它,请提供帮助。这将是一个很大的帮助。非常感谢advanced。好的,但是活动的onBackPressed()
呢?这就是当软键盘打开时按下后退按钮时,back key triggersActivity的Backpress不会被调用的原因。请看我的编辑。更改dispatchKeyEventPreIme
。我犯了一个错误。进行了另一项更改确定,我正在检查此解决方案并将更新您。请尝试此。。popupWindow.setCancelable(false)@MeenalSharma popupWindow没有setCancelable
方法<代码>警报对话框
和对话框
执行。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.package.name.CustomSearchView
android:layout_width="match_parent"
android:id="@+id/customSearchView"
android:background="@android:color/black"
android:layout_height="match_parent"></com.package.name.CustomSearchView>
</LinearLayout>
public class CustomSearchView extends SearchView {
Context context;
public CustomSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
clearFocus();
Toast.makeText(context, "CustomSearchView Back Pressed", Toast.LENGTH_SHORT).show();
return false;
} else {
return super.dispatchKeyEventPreIme(event);
}
}
}