横屏模式下输入时显示搜索建议

3

我在搜索对话框的搜索字段中输入时已经获得了搜索建议。在纵向模式下,结果会显示在搜索对话框下方。但是当我切换到横向模式时,搜索对话框的文本输入框变成了全屏模式(我希望您知道我的意思),因此无法再看到搜索建议。例如从谷歌地图中我了解到,即使在横向模式下,搜索建议也会显示在“大”的文本输入字段下面... 我应该编写哪些代码以在横向模式下输入时获得这种“视图”?

谢谢!

Thomas


你能展示一下那个屏幕的布局代码吗? - Pankaj Kumar
1个回答

5

如果您想在横屏模式下显示建议,请执行以下操作之一:

  • 将`SUGGEST_COLUMN_QUERY`添加到您的建议结果中
  • 将`android:searchMode="queryRewriteFromText"`或`android:searchMode="queryRewriteFromData"` 添加到您的`searchable.xml`中

不过,我认为对于建议而言,与其显示全屏键盘,不如只显示正常的弹出菜单更好。您可以通过在您的`searchable.xml`中添加`android:imeOptions="flagNoExtractUi"`来实现此目标。

就是这样了。如果您感到好奇,以下是我查找这些信息的方法:

层级查看器 将告诉你,搜索对话框是由 SearchDialog 实现的,它使用一个 AutoCompleteTextView 作为完成文本视图。它的 buildDropDown() 函数在 AutoCompleteTextViewmAdapter.getItem() 返回的项目上调用 Filter.convertResultToString()(通过 convertSelectionToString()),然后将其传递给 InputMethodManager.displayCompletions()(负责您所需的建议)。

SearchDialog的情况下,适配器是SuggestionsAdapter。这是CursorAdapter的子类,其getFilter()方法返回一个CursorFilter类,该类通过委托到适配器类上的convertToString()来实现convertResultToString()。最后,SuggestionsAdapter实现了以下方法:
public CharSequence convertToString(Cursor cursor) {
    if (cursor == null) {
        return null;
    }

    String query = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_QUERY);
    if (query != null) {
        return query;
    }

    if (mSearchable.shouldRewriteQueryFromData()) {
        String data = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_INTENT_DATA);
        if (data != null) {
            return data;
        }
    }

    if (mSearchable.shouldRewriteQueryFromText()) {
        String text1 = getColumnString(cursor, SearchManager.SUGGEST_COLUMN_TEXT_1);
        if (text1 != null) {
            return text1;
        }
    }

    return null;
}

...这导致了上面第一段的建议。


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