无法在SearchView中自动显示键盘

int*_*_32 20 android android-softkeyboard android-4.0-ice-cream-sandwich searchview android-4.2-jelly-bean

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

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Run Code Online (Sandbox Code Playgroud)

但是,当我点击SearchView时 - 它确实如此.为什么?

int*_*_32 30

固定!

mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
                        @Override
                        public void onFocusChange(View view, boolean hasFocus) {
                            if (hasFocus) {
                                showInputMethod(view.findFocus());
                            }
                        }
                    });
Run Code Online (Sandbox Code Playgroud)

private void showInputMethod(View view) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if (imm != null) {
          imm.showSoftInput(view, 0);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Md *_*ury 11

如果您使用的是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"/>
Run Code Online (Sandbox Code Playgroud)

然后只需将其添加到您的onCreate方法中:

final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
        searchView.setFocusable(true);
        searchView.setIconified(false);
        searchView.requestFocusFromTouch();
Run Code Online (Sandbox Code Playgroud)

这个对我有用。


小智 9

我遇到了一个仍然无法打开键盘的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);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 作品并点赞!但就我而言,问题在于操作栏中的“SearchView”位置,因此,如果它可以帮助某人...找到始终可见的 searchView,在 xml 中使用“showAsAction=“always””,键盘会立即出现。 (2认同)

Fif*_*eep 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);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)


Pra*_*pta 5

最好和最简单的方法:

        android:focusable="true"
        app:iconifiedByDefault="false"
        android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)

将以上三行添加到 SearchView 下的 xml 中,看看神奇的......!