我想在虚拟键盘被解雇时调用mSearchView.clearFocus(),该怎么做?
我的问题是,一旦SearchView聚焦,它就会保持专注,所以如果我使用后退按钮取消虚拟键盘,并打开一个AlertDialog - 例如 - 一旦我关闭AlertDialog作为搜索,虚拟键盘会再次弹出视图仍然具有焦点,就好像它重新获得焦点一样。
对于我使用的SearchView:
android:iconifiedByDefault="false"
android:focusable="false"
该活动的保存我使用的SearchView:
android:windowSoftInputMode="stateUnspecified|adjustPan"
即使我将其更改为以下内容我也会遇到同样的问题
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
Eidt 1:
更改
android:iconifiedByDefault="false"
是
android:iconifiedByDefault="true"
没有解决问题,我得到了相同的结果。
编辑2:
我尝试了创建自定义SearchView并覆盖onKeyPreIme并调用clearFocus()的方法,但是onKeyPreIme没有被调用。
public class ModifiedSearchView extends SearchView {
public ModifiedSearchView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onKeyPreIme (int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
clearFocus();
return false;
}
return super.dispatchKeyEvent(event);
}
}
答案 0 :(得分:0)
要隐藏键盘,请使用此
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:focusableInTouchMode="true">
<SearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"/>
</LinearLayout>
然后在你onBackPressed()
if (searchView != null) {
searchView.setQuery("", false);
searchView.clearFocus();
rootView.requestFocus();
}
而rootView
是
rootView = findViewById(R.id.root_layout);
答案 1 :(得分:0)
我尝试将searchview添加到linerlayout,我没有像你一样的问题。但是,如果要跟踪虚拟键盘隐藏事件,请在onCreate()
中使用以下代码mLLWrapper.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
mLLWrapper.getWindowVisibleDisplayFrame(r);
int heightDiff = mLLWrapper.getRootView().getHeight() - (r.bottom - r.top);
if (heightDiff > 300) { // if more than 100 pixels, its probably
// keyboard visible
} else {
// keyboard in not visible
}
}
});
mLLWrapper
是活动的根LinearLayout视图
键盘解除后,请调出清晰焦点。这可能有所帮助。如果没有使用更多代码更新您的问题,我们将很容易为您提供帮助。
答案 2 :(得分:0)
尝试这种方式
internal class ProductSearchView(context: Context, attrs: AttributeSet) : SearchView(context, attrs) {
override fun dispatchKeyEventPreIme(event: KeyEvent?): Boolean {
return false
}
}