在横向模式下键入时显示搜索建议

Posted

技术标签:

【中文标题】在横向模式下键入时显示搜索建议【英文标题】:Show Search Suggestions while typing in landscape-mode 【发布时间】:2011-05-03 08:35:11 【问题描述】:

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

谢谢!

托马斯

【问题讨论】:

你能显示你的那个屏幕的布局代码吗? 【参考方案1】:

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

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

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

仅此而已。如果你很好奇,我是这样追踪的:

Hierarchy Viewer 会告诉你搜索对话框是由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;

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

【讨论】:

以上是关于在横向模式下键入时显示搜索建议的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中搜索时显示建议?

iOS:如何在另一个表格视图中显示搜索结果?以及如何在搜索时显示建议?

实现 jquery UI 自动完成以在您键入“@”时显示建议

如何在导航栏下隐藏搜索栏并在用户下拉表格视图时显示它?

在 AutoSuggestBox 中导航建议时显示占位符

Xcode 搜索控制器 - 在开始时显示搜索栏 (Swift 4)