web-dev-qa-db-ja.com

SearchViewにキーボードを自動的に表示できません

SearchViewはデフォルトでフォーカスされていますが、ソフトウェアキーボードを表示しようとすると、発生しません。

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

しかし、SearchViewをクリックすると、そうなります。どうして?

21
int_32

修繕!

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

それでもキーボードを開かない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);
            }
        }
    });
10
user901309

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

わたしにはできる。

5

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);
        }
    }
});
4
Fifer Sheep

それを行うための最良かつ最も簡単な方法:

        Android:focusable="true"
        app:iconifiedByDefault="false"
        Android:focusableInTouchMode="true"

上記の3行をSearchViewの下のxmlに追加して、魔法を見てください。

3
Prateek Gupta

試してください:

void focusSearchViewAndOpenOrCloseKeyboard(boolean focus) {
    searchView.setIconified(focus);
}

source は、SearchViewが独自の ソフトキーボードの開閉 を処理することを示しています。

2