30

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

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

しかし、SearchViewをクリックすると、そうです。なんで?

4

9 に答える 9

45

修理済み!

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);
        }
    }
于 2012-08-20T01:16:09.567 に答える
12

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

わたしにはできる。

于 2016-09-22T09:48:52.097 に答える
12

キーボードを開けない 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);
            }
        }
    });
于 2015-05-22T16:14:21.827 に答える
6

を使用するのは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);
        }
    }
});
于 2012-08-19T00:02:21.840 に答える
-1

次の簡単な方法でこの問題を解決しました。

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つの方法の後、フォーカスをクリアします。

于 2016-11-23T12:21:23.573 に答える