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 的这个问题,并且能够通过添加 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 回答
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 回答
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 回答
4

最好和最简单的方法:

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

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

于 2018-04-29T16:45:39.757 回答
2

尝试:

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

源代码向我们展示了SearchView它自己处理软键盘的关闭和打开

于 2017-01-13T19:23:41.183 回答
0
 <EditText
        android:id="@+id/edt_search"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerVertical="true"
        android:background="@null"
        android:ellipsize="end"
        android:hint="@string/SERACH"
        android:imeOptions="actionSearch"
        android:inputType="textVisiblePassword"
        android:singleLine="true"
        android:textAlignment="viewStart" />
于 2020-09-30T06:28:10.120 回答
0

像这样添加<requestFocus />您的搜索视图

<EditText
            android:id="@+id/et_search"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:background="@android:color/transparent"
            android:imeOptions="actionSearch"
            android:maxLines="1"
            android:padding="8dp"
            android:singleLine="true"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            android:textColor="@android:color/white"
            android:textColorHint="#e6e6e6">

            <requestFocus />

        </EditText>
于 2021-09-01T15:56:14.413 回答
-1

我用下一个简单的方法解决了这个问题。

搜索视图菜单项:

<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 标志进行测试。结果,当标志:“总是”时,键盘不显示。然而,一切都适用于标志:“ always|collapseActionView

expandActionView() + setQuery("null 或恢复文本", true); 可以在创建(或恢复)视图时调用以显示键盘并专注于搜索。PS:调用mSearchView.clearFocus(); 经过这两种方法清除焦点。

于 2016-11-23T12:21:23.573 回答