为searchView Android应用添加提交按钮

时间:2013-07-02 15:13:15

标签: android searchview submit-button

我在我的Android应用中使用searchview,我想添加一个用户按下以开始搜索的按钮。基于我在Internet上阅读的内容,我可以使用setSubmitButtonEnabled来调用提交按钮,而不是在布局文件中放置按钮。这是我的代码:

public void setSubmitButtonEnabled (boolean enabled) {

}

我将setSubmitButtonEnabled放在菜单inflater中,如下所示:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mylist, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);

    setSubmitButtonEnabled(true);

    return true;
}

显然我做得不对,因为当我启动我的应用程序时,我在屏幕上看不到任何提交按钮。我的代码中缺少什么或出了什么问题?谢谢。

1 个答案:

答案 0 :(得分:0)

只有在SearchView有焦点时才会显示提交按钮。我的解决方法是使用ActionBarSherlockABS),并编辑源代码,以便即使ActionBar没有焦点也可以显示提交按钮。为此,请按照下列步骤操作:

<强> 1。设置ActionBarSherlock项目

要执行此操作,请按照链接下载ABS,然后在 Eclipse (或您喜欢的IDE)中,转到File - &gt; New - &gt; Project...,然后选择Android - &gt; Android Project from Existing Code。在以下向导中,导航到actionbarsherlock文件夹的位置,然后单击“确定”以创建项目。创建后,您可以将其作为库添加到现有项目中,方法是转到Project - &gt; Properties - &gt; Android,然后转到底部库< / em>部分,点击Add...,然后选择actionbarsherlock。最后,按OK。

<强> 2。编辑来源

要解决此问题,您需要编辑文件com.actionbarsherlock.widget.SearchView.java。打开后,导航到updateSubmitButton(boolean)方法,并注释掉代码

&& hasFocus()

您的最终方法将如下所示:

private void updateSubmitButton(boolean hasText) {
    int visibility = GONE;
    if (mSubmitButtonEnabled && isSubmitAreaEnabled() //&& hasFocus()
            && (hasText || !mVoiceButtonEnabled)) {
        visibility = VISIBLE;
    }
    mSubmitButton.setVisibility(visibility);
}

现在保存,清理项目并运行 - 现在您将获得所需的结果。

第3。记录您的更改(可选)

您可以使用Modified注释记录此更改,例如:

@Modified(author="Phil Brown", summary="Commented out '&& hasFocus()' in order to allow the submit button to be shown without focus to the view.")
private void updateSubmitButton(boolean hasText) {
    ...
}