3

在搜索对话框的搜索字段中输入时,我已经得到了搜索建议。在纵向模式下键入时,结果会列在搜索对话框下。但是当我更改为横向模式时,搜索对话框的文本输入字段变为全屏(我希望您知道我的意思)并且无法再看到搜索建议。例如,我从谷歌地图中知道,在横向模式下,搜索建议也显示在“大”文本输入字段下……在横向模式下输入时,我应该输入哪些代码来获得这个“视图”?

谢谢!

托马斯

4

1 回答 1

5

如果您希望您的建议以横向显示,您需要执行以下操作之一:

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

但是,我认为建议最好只显示普通弹出窗口而不是全屏键盘。您可以通过添加android:imeOptions="flagNoExtractUi"到您的searchable.xml.

就这样。如果你很好奇,我是这样追踪的:

Hierarchy Viewer会告诉你搜索对话框是由 实现的SearchDialog,它使用一个AutoCompleteTextView完成文本视图。它的buildDropDown()函数调用Filter.convertResultToString()(通过convertSelectionToString())返回的项目AutoCompleteTextViewmAdapter.getItem()然后将这些传递给InputMethodManager.displayCompletions()(负责您想要的建议)。

在 的情况下SearchDialog,适配器是SuggestionsAdapter. 这是 的子类CursorAdapter,其getFilter()方法返回一个CursorFilter类,该类convertResultToString()仅通过委托到convertToString()适配器类来实现。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;
}

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

于 2011-06-06T03:50:04.760 回答