Если вы хотите, чтобы ваши предложения отображались в альбомной ориентации, вам необходимо выполнить одно из следующих действий:
- Добавить
SUGGEST_COLUMN_QUERY
к результатам вашего предложения - Добавить
android:searchMode="queryRewriteFromText"
или `` android: searchMode = "queryRewriteFromData" to your
searchable.xml`
Однако я считаю, что для предложений лучше показывать обычное всплывающее окно вместо полноэкранной клавиатуры.Вы можете добиться этого, добавив android:imeOptions="flagNoExtractUi"
к вашему searchable.xml
.
И это все.Если вам интересно, вот как я отследил это:
Средство просмотра иерархии скажет вам, что диалог поиска реализован с помощью SearchDialog
, который используетAutoCompleteTextView
для завершения просмотра текста.Его buildDropDown()
вызывает функцию Filter.convertResultToString()
(через convertSelectionToString()
) для элементов, возвращаемых AutoCompleteTextView
s 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;
}
… что приводит к рекомендациям в первом параграфе выше.