该搜索查看默认情况下,有重点,但是当我试图说明软件键盘 - 它不会发生:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
但是,当我点击搜索查看 - 它。 为什么?
该搜索查看默认情况下,有重点,但是当我试图说明软件键盘 - 它不会发生:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
但是,当我点击搜索查看 - 它。 为什么?
固定!
mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
showInputMethod(view.findFocus());
}
}
});
和
private void showInputMethod(View view) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(view, 0);
}
}
我遇到过这个问题,仍然不会打开该键盘搜索查看,并能够通过增加200ms的延迟可以这样做:
mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(final View view, boolean hasFocus) {
if (hasFocus) {
view.postDelayed(new Runnable() {
@Override
public void run() {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view.findFocus(), 0);
}
}, 200);
}
}
});
怎么样使用setOnFocusChangeListener
?
searchview.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus){
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}
}
});
尝试:
void focusSearchViewAndOpenOrCloseKeyboard(boolean focus) {
searchView.setIconified(focus);
}
该源告诉我们, SearchView
处理自己的关闭和软键盘的开启 。
如果你正在使用搜索查看 :
<android.support.v7.widget.SearchView
android:id="@+id/searchView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:focusableInTouchMode="true"
android:iconifiedByDefault="true"
app:showAsAction="always"
app:iconifiedByDefault="true"/>
然后,只需将它添加到您的onCreate方法:
final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
这个对我有用。
最好,做最简单的方法:
android:focusable="true"
app:iconifiedByDefault="false"
android:focusableInTouchMode="true"
加入上述三行到搜索查看下你的XML,看到了魔术......!
我在明年简单的方式解决了这个问题。
搜索查看菜单项:
<item
android:id="@+id/menu_item_search"
android:icon="@drawable/ic_search"
android:title="@android:string/search_go"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always|collapseActionView" />
为了扩大搜索查看,并显示键盘编程方式调用:
mMenuItemSearch.expandActionView();
mSearchView.setQuery("your default query test or null", true);
测试了不同showAsAction标志。 作为结果的键盘上没有显示时,标志:“ 总是 ”。 然而一切正常,旗:“ 永远| collapseActionView”
expandActionView()+ setQuery( “null或恢复文本”,TRUE); 当视图中创建(或恢复)来显示键盘和专注于搜索可以被调用。 PS:调用mSearchView.clearFocus(); 这两方法后清除焦点。