SearchView はデフォルトでフォーカスされていますが、ソフトウェア キーボードを表示しようとすると、表示されません。
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
しかし、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を使用している場合:
<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 でこの問題が発生しましたが、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);
}
}
});
次の簡単な方法でこの問題を解決しました。
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);
さまざまな showAsAction フラグでテスト済み。その結果、flag: " always "の場合、キーボードは表示されません。ただし、すべてフラグで動作します: " always|collapseActionView "
expandActionView() + setQuery("null または復元されたテキスト", true); ビューが作成 (または復元) されたときに呼び出して、キーボードを表示し、検索にフォーカスすることができます。PS: mSearchView.clearFocus() を呼び出します。この2つの方法の後、フォーカスをクリアします。