1

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

public void setSubmitButtonEnabled (boolean enabled) {

}

我将 setSubmitButtonEnabled 放在菜单充气机中,如下所示:

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

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

4

1 回答 1

0

提交按钮仅在SearchView具有焦点时显示。我的解决方法是使用ActionBarSherlock ( ABS),并编辑源代码以允许提交按钮即使在ActionBar没有焦点的情况下也能显示。为此,请按照下列步骤操作:

1. 设置 ActionBarSherlock 项目

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

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) {
    ...
}
于 2013-08-02T13:43:27.100 回答