聚焦SearchView以使软键盘出现?

5

我有一个针对API 11及以上版本的项目,因此不使用actionbarsherlock。

我正在使用SearchView启动一个活动。我想立即聚焦SearchView,并使软键盘弹出(如果没有硬件键盘)。我尝试过:

mSearchView.requestFocus();
mSearchView.requestFocusFromTouch();

这段代码确实能够聚焦搜索视图,但是它并没有显示键盘。我已经阅读了其他帖子,称这段代码有效。其他帖子尝试使用以下方法强制弹出键盘:

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

当我提交搜索查询后,键盘会显示出来,但是它的行为很奇怪 - 它会隐藏自己,然后再次弹出,最后再隐藏。

有没有正确的方法可以让它正常工作?

谢谢

-------- 编辑 ----------------

这是我的设置方式:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);

    ...     

    MenuItem searchItem = menu.findItem(R.id.action_search); 
    mSearchView = (SearchView) searchItem.getActionView();
    mSearchView.setIconifiedByDefault(false);

    if (!mDidThisOnce) {
        mSearchView.requestFocusFromTouch();
        InputMethodManager imm = ...;
        imm.toggleSoftInput(...);
        mDidThisOnce = true;
    }
}

------ 最后编辑 -----------

所以这个方法有效,但我需要保持一个标志来确保我不会多次运行imm代码,否则在提交搜索后它会一直弹出键盘。


你尝试过使用mSearchView.setIconofied(false);吗? - gunar
我想始终保持SearchView扩展状态,因此我将其设置为true。 - user291701
你把 imm.toggleSoftInput 放在哪里了? - shem
我将它放在onCreateOptionsMenu()的末尾,等待我的searchview可用后再执行。我还尝试将其放入一个带有postDelayed()的runnable中。更新了我的问题以包含该代码。 - user291701
这是一个老问题了:要想去掉标志,请尝试在主视图上发布可运行的代码,执行显示键盘代码,这样只会发生一次,并且它将等待视图被渲染,因此菜单肯定已经创建好了。 - prom85
1个回答

1

我遇到了同样的问题。

之前我使用 searchView.clearFocus();,那个方法对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接