无法在SearchView中自动显示键盘

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

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

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

Solutions Collecting From Web of "无法在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怎么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处理自己closures和打开软键盘 。

如果您使用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(); 

这个对我有用。

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

SearchView菜单项:

 <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" /> 

以编程方式展开SearchView并显示键盘:

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

testing了不同的showAsAction标志。 当标志为“ always ”时结果键盘不显示。 然而,一切与标志:“ always | collapseActionView

expandActionView()+ setQuery(“null or restored text”,true); 可以在创build(或恢复)视图时调用显示键盘并专注于search。 PS:调用mSearchView.clearFocus(); 之后这两个方法来清除重点。