无法在SearchView中自动显示键盘

SearchView默认是聚焦的,但是当我尝试显示软件键盘时 – 它不会发生:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 

但是当我点击SearchView时 – 它确实如此。 为什么?

固定!

 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); } } 

我遇到了一个仍然无法打开键盘的SearchView问题,并且能够通过添加200毫秒的延迟来实现:

  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处理它自己的关闭和打开软键盘 。

如果您使用的是SearchView

  

然后将其添加到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" 

将以上三行添加到SearchView下的xml中,看看魔术…. !!

我用下一个简单的方法解决了这个问题。

SearchView菜单项:

  

要以编程方式扩展SearchView并显示键盘,请致电:

 mMenuItemSearch.expandActionView(); mSearchView.setQuery("your default query test or null", true); 

使用不同的showAsAction标志进行测试。 结果键盘在标志:“ always ”时没有显示。 但是一切都适用于标志:“ always | collapseActionView

expandActionView()+ setQuery(“null或restore text”,true); 可以在创建(或恢复)视图时调用以显示键盘并专注于搜索。 PS:调用mSearchView.clearFocus(); 在这两种方法之后清除焦点。