2011-05-03 88 views
3

在搜索对话框的搜索栏中输入时,我已经获得搜索建议。在纵向模式下输入时,结果会在搜索对话框中列出。但是,当我改变为横向模式时,searchdialog的文本输入字段变为全屏(我希望你知道我的意思),搜索建议无法再看到。我知道,例如谷歌地图,也在横向模式下,搜索建议显示在“大”文本输入字段下...我应该键入以在景观模式下输入时获得此“视图”?显示搜索在横向模式下输入时的建议

谢谢!

托马斯

+0

你可以显示你的屏幕布局代码? – 2011-05-03 09:53:52

回答

5

如果你想你的建议,在景观展现出来,你需要做以下之一:

  • 添加SUGGEST_COLUMN_QUERY您的建议会导致
  • 添加android:searchMode="queryRewriteFromText"或``机器人:searchMode =“queryRewriteFromData”to your searchable.xml`

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

就是这样。如果你很好奇,这里就是我跟踪下来:

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

SearchDialog的情况下,适配器是SuggestionsAdapter。这是CursorAdapter的一个子类,它的getFilter()方法返回一个CursorFilter类,该类仅通过在适配器类上委托convertToString()来实现convertResultToString()

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

...这导致在上述第一款的建议:SuggestionsAdapter如下终于实现了这个方法。

相关问题