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

Tsc*_*kle 3 android landscape search-suggestion

我在搜索对话框的搜索字段中输入时已经获得了搜索建议.在纵向模式下键入时,结果将列在搜索对话框下.但当我改为横向模式时,searchdialog的文本输入字段变为全屏(我希望你知道我的意思),搜索建议再也看不到了.我知道例如来自谷歌地图,也在横向模式下,搜索建议显示在"大"文本输入字段下...我应该输入哪个代码以在横向模式下键入时获得此"视图"?

谢谢!

托马斯

tha*_*kis 5

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

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

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

就这样.如果你很好奇,这就是我追踪它的方式:

层次结构查看器将告诉您搜索对话框是由实现的SearchDialog,它使用AutoCompleteTextView完成文本视图.它的buildDropDown()函数调用Filter.convertResultToString()(通过convertSelectionToString())AutoCompleteTextViews 返回的项目mAdapter.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;
}
Run Code Online (Sandbox Code Playgroud)

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