无法在SearchView中自动显示键盘

时间:2012-08-18 22:31:35

标签: android android-4.0-ice-cream-sandwich android-softkeyboard android-4.2-jelly-bean searchview

默认情况下,SearchView是专注的,但是当我尝试显示软件键盘时 - 它不会发生:

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

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

8 个答案:

答案 0 :(得分:30)

固定!

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

答案 1 :(得分: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);
            }
        }
    });

答案 2 :(得分: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);
        }
    }
});

答案 3 :(得分:1)

如果您使用 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();

它对我有用。

答案 4 :(得分:1)

尝试:

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

source告诉我们SearchView处理自己的closing and opening of the soft keyboard

答案 5 :(得分:1)

最简单的方法:

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

在SearchView下的xml中添加以上三行并查看魔法...... !!

答案 6 :(得分: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" />

答案 7 :(得分:-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标志进行测试。因此,标记时键盘不显示:“始终”。但是一切都适用于旗帜:“总是| collapseActionView

expandActionView()+ setQuery(“null或恢复文本”,true); 可在视图创建(或恢复)时调用,以显示键盘并专注于搜索。 P.S:在这两个方法之后调用 mSearchView.clearFocus(); 来清除焦点。