我在搜索对话框的搜索字段中输入时已经获得了搜索建议。在纵向模式下,结果会显示在搜索对话框下方。但是当我切换到横向模式时,搜索对话框的文本输入框变成了全屏模式(我希望您知道我的意思),因此无法再看到搜索建议。例如从谷歌地图中我了解到,即使在横向模式下,搜索建议也会显示在“大”的文本输入字段下面... 我应该编写哪些代码以在横向模式下输入时获得这种“视图”?
谢谢!
Thomas
我在搜索对话框的搜索字段中输入时已经获得了搜索建议。在纵向模式下,结果会显示在搜索对话框下方。但是当我切换到横向模式时,搜索对话框的文本输入框变成了全屏模式(我希望您知道我的意思),因此无法再看到搜索建议。例如从谷歌地图中我了解到,即使在横向模式下,搜索建议也会显示在“大”的文本输入字段下面... 我应该编写哪些代码以在横向模式下输入时获得这种“视图”?
谢谢!
Thomas
如果您想在横屏模式下显示建议,请执行以下操作之一:
不过,我认为对于建议而言,与其显示全屏键盘,不如只显示正常的弹出菜单更好。您可以通过在您的`searchable.xml`中添加`android:imeOptions="flagNoExtractUi"`来实现此目标。
就是这样了。如果您感到好奇,以下是我查找这些信息的方法:
层级查看器 将告诉你,搜索对话框是由 SearchDialog
实现的,它使用一个 AutoCompleteTextView
作为完成文本视图。它的 buildDropDown()
函数在 AutoCompleteTextView
的 mAdapter.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;
}
...这导致了上面第一段的建议。