无法在SearchView中自动显示键盘

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

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

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

  • 如何从searchviewinput到textview
  • Android - Actionbar Sherlock - searchfilter
  • 使用AppCompat 22.1.0deviseAppCompat SearchView不起作用
  • 如何删除Toolbar Android中的SearchView小部件中的白色下划线
  • SearchView在具有自定义适配器的ListView中
  • 在android中的SearchView自定义字体
  • 操作栏Sherlock SearchView没有扩展点击它
  • 无法获取操作栏中的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(); 在这两种方法之后清除焦点。