Показать подсказки при наборе текста в ландшафтном режиме - PullRequest
3 голосов
/ 03 мая 2011

Я уже получаю подсказку при вводе в поле поиска диалогового окна поиска.При наборе текста в портретном режиме результат отображается в диалоговом окне поиска.Но когда я перехожу в ландшафтный режим, поле ввода текста в поисковом диалоге становится полноэкранным (надеюсь, вы понимаете, что я имею в виду), и предложения поиска уже не видны.я знаю, например, из карт Google, что также в альбомном режиме поисковые подсказки отображаются под «большим» полем ввода текста ... Какой код я должен набрать, чтобы получить это «представление» при наборе текста в ландшафтном режиме?

Спасибо!

Томас

1 Ответ

5 голосов
/ 06 июня 2011

Если вы хотите, чтобы ваши предложения отображались в альбомной ориентации, вам необходимо выполнить одно из следующих действий:

  • Добавить 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;
}

… что приводит к рекомендациям в первом параграфе выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...