Searchview 清除焦点隐藏键盘
Searchview clear focus on hide keyboard
用户按下隐藏键盘按钮或后退按钮。
所以我需要在用户隐藏键盘时清除对 SearchView 的关注。
我试过了,但没用。当用户隐藏键盘时焦点仍然存在。
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
app.requests.getApi().search(newText).enqueue(SearchFragment.this);
return false;
}
});
还有这个:
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
app.functions.logWrite("has focus to searchview");
} else {
//code
}
}
});
好的,试试吧,不幸的是它需要使用一个库,但它使它更容易。
在您的 build.gradle 中:添加:
dependencies {
implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:3.0.0-RC2'
}
在声明 SearchView
的 fragment/class 中使用 KeyboardVisibilityEvent library 注册键盘事件:
KeyboardVisibilityEvent.setEventListener(
getActivity(),
new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
if (!isOpen) {
View focusedView = getWindow().getCurrentFocus();
if (focusedView != null && focusedView instanceof SearchView) { // does SearchView have focus?
searchView.clearFocus();
}
}
}
});
searchView.clearFocus();
假设您在层次结构中有另一个可聚焦视图,如果没有将其添加到您的片段布局中:
android:focusableInTouchMode="true"
或者只需在您想要获得焦点的任何其他视图元素上调用 focus();
。
这就是我通过重写 onBackPressed()
来处理 SearchView
的后退按钮点击的方法
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
ANY_VIEW_IN_YOUR_LAYOUT.requestFocus();
} else
super.onBackPressed();
}
希望这对您有所帮助。随时要求澄清...
用户按下隐藏键盘按钮或后退按钮。 所以我需要在用户隐藏键盘时清除对 SearchView 的关注。
我试过了,但没用。当用户隐藏键盘时焦点仍然存在。
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
searchView.clearFocus();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
app.requests.getApi().search(newText).enqueue(SearchFragment.this);
return false;
}
});
还有这个:
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
app.functions.logWrite("has focus to searchview");
} else {
//code
}
}
});
好的,试试吧,不幸的是它需要使用一个库,但它使它更容易。
在您的 build.gradle 中:添加:
dependencies {
implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:3.0.0-RC2'
}
在声明 SearchView
的 fragment/class 中使用 KeyboardVisibilityEvent library 注册键盘事件:
KeyboardVisibilityEvent.setEventListener(
getActivity(),
new KeyboardVisibilityEventListener() {
@Override
public void onVisibilityChanged(boolean isOpen) {
if (!isOpen) {
View focusedView = getWindow().getCurrentFocus();
if (focusedView != null && focusedView instanceof SearchView) { // does SearchView have focus?
searchView.clearFocus();
}
}
}
});
searchView.clearFocus();
假设您在层次结构中有另一个可聚焦视图,如果没有将其添加到您的片段布局中:
android:focusableInTouchMode="true"
或者只需在您想要获得焦点的任何其他视图元素上调用 focus();
。
这就是我通过重写 onBackPressed()
SearchView
的后退按钮点击的方法
@Override
public void onBackPressed() {
if (!searchView.isIconified()) {
searchView.setIconified(true);
ANY_VIEW_IN_YOUR_LAYOUT.requestFocus();
} else
super.onBackPressed();
}
希望这对您有所帮助。随时要求澄清...