ContentProvider を介してカスタム検索候補が提供される検索ボックスのセットアップがあります。これらの候補は、Android 検索候補 API を介して処理され、Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
メソッドを呼び出して収集されます。候補がカーソル内に返されると、検索ボックスの下のリストに表示されます。
私の問題は、各検索候補の部分文字列を太字にしたいということです。HTML の太字タグ<b>
と</b>
これらの部分文字列を配置しました。Html.fromHtml(stringWithBoldTags)
ただし、返される Cursorに追加しても(a MatrixCursor
)、テキストはすべてプレーン テキストとして表示されます。
検索候補 API を使用してテキストを太字にする方法があるかどうか疑問に思っていました。検索候補のスタイルを完全に変更したくないので、この小さな変更のためだけに独自の検索候補 API を実装するのはやりすぎのようです。
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
List<String> suggestions = getSuggestions(searchTerm);
MatrixCursor cursor = new MatrixCursor(new String[] { BaseColumns._ID,
SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_INTENT_DATA,
SearchManager.SUGGEST_COLUMN_QUERY } );
for (int i = 0; i < suggestions.size(); ++i) {
String suggestion = suggestions.get(i);
Object[] row = { Integer.toString(i),
Html.fromHtml(makeSubstringBold(suggestion, searchTerm)),
suggestion, suggestion };
cursor.addRow(row);
}
return cursor;
}
private List<String> getSuggestions(String searchTerm) {
// Return a list of suggestions for the searchTerm
}
private String makeSubstringBold(String fullString, String substring) {
// Find substring in fullString and add HTML bold tags either side of it
}
検索候補 API をカーソルで返された太字のタグに従わせることができる方法を誰かが知っている場合は、大いに感謝します!