3

検索ダイアログの検索フィールドに入力しているときに、既に検索候補を取得しています。ポートレート モードで入力すると、結果が検索ダイアログの下に一覧表示されます。しかし、ランドスケープ モードに変更すると、検索ダイアログのテキスト入力フィールドがフルスクリーンになり (意味がわかると思います)、検索候補が表示されなくなりました。たとえば、Googleマップから、ランドスケープモードでも検索候補が「大きな」テキスト入力フィールドの下に表示されることを知っています...ランドスケープモードで入力しているときに、この「ビュー」を取得するにはどのコードを入力すればよいですか?

ありがとう!

トーマス

4

1 に答える 1

5

提案を横向きに表示するには、次のいずれかを行う必要があります。

  • SUGGEST_COLUMN_QUERY提案結果に追加
  • android:searchMode="queryRewriteFromText"または ``android:searchMode="queryRewriteFromData" to yoursearchable.xml`を追加します

ただし、提案としては、フルスクリーン キーボードではなく、通常のポップアップを表示する方がよいと思います。に追加することでこれを実現できandroid:imeOptions="flagNoExtractUi"ますsearchable.xml

それだけです。興味がある場合は、これを追跡した方法を次に示します。

Hierarchy Viewerは、検索ダイアログが によって実装されていることを通知します。これは、補完テキスト ビューにSearchDialogを使用します。AutoCompleteTextViewそのbuildDropDown()関数は、 によって返されたアイテムに対してFilter.convertResultToString()( を介して) を呼び出し、これらを (必要な提案を担当する) に渡します。convertSelectionToString()AutoCompleteTextViewmAdapter.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;
}

…これにより、上記の最初の段落の推奨事項が得られます。

于 2011-06-06T03:50:04.760 に答える