无法在搜索查看自动显示键盘(Unable to show keyboard automaticall

2019-06-27 04:23发布

该搜索查看默认情况下,有重点,但是当我试图说明软件键盘 - 它不会发生:

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

但是,当我点击搜索查看 - 它。 为什么?

Answer 1:

固定!

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


Answer 2:

我遇到过这个问题,仍然不会打开该键盘搜索查看,并能够通过增加200ms的延迟可以这样做:

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


Answer 3:

怎么样使用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);
        }
    }
});


Answer 4:

尝试:

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

该源告诉我们, SearchView处理自己的关闭和软键盘的开启 。



Answer 5:

如果你正在使用搜索查看

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

这个对我有用。



Answer 6:

最好,做最简单的方法:

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

加入上述三行到搜索查看下你的XML,看到了魔术......!



Answer 7:

我在明年简单的方式解决了这个问题。

搜索查看菜单项:

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

为了扩大搜索查看,并显示键盘编程方式调用:

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

测试了不同showAsAction标志。 作为结果的键盘上没有显示时,标志:“ 总是 ”。 然而一切正常,旗:“ 永远| collapseActionView”

expandActionView()+ setQuery( “null或恢复文本”,TRUE); 当视图中创建(或恢复)来显示键盘和专注于搜索可以被调用。 PS:调用mSearchView.clearFocus(); 这两方法后清除焦点。



文章来源: Unable to show keyboard automatically in the SearchView