Подтвердить что ты не робот

AutocompleteTextview и CompletionHintView

В настоящее время я реализую поле автозаполнения с помощью компонента AutocompleteTextView.

Я пытаюсь добавить подсказку завершения с количеством результатов и просто хочу по-разному стилизовать ее из элемента выпадающего списка. В компоненте есть атрибут с именем completionHintView, но каждый раз, когда я даю ему макет, который я ранее определял, он бросает NullPointerException.

Есть ли у кого-нибудь рабочий пример того, как стиль подсказки завершения?

4b9b3361

Ответ 1

Можете ли вы рассказать о том, какой стиль вы хотите применить?

Если это просто базовый стиль текста, вы, вероятно, можете создать Spannable и установить подсказку завершения с результатом, так как он принимает CharSequence. Пример построения Spannable и применения стилей к нему проиллюстрирован в этом сообщении.

Если вы ищете способ фактического манипулирования параметрами TextView (например, дополнением), исходный код AutoCompleteTextView кажется, дает подсказку (каламбур).

private View getHintView(Context context) {
    if (mHintText != null && mHintText.length() > 0) {
        final TextView hintView = (TextView) LayoutInflater.from(context).inflate(
                mHintResource, null).findViewById(com.android.internal.R.id.text1);
        hintView.setText(mHintText);
        hintView.setId(HINT_VIEW_ID);
        return hintView;
    } else {
        return null;
    }
}

Это показывает, что Android ищет идентификатор text1 в указанной вами ссылке на ресурс. Самая базовая версия такого ресурса будет содержать только TextView с этим id:

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1" android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:padding="10dp"
        android:textColor="#FF0000" android:textSize="16sp" />

Сохраняйте выше в файле макета (например, completion_hint_view.xml) и ссылайтесь на него следующим образом: AutoCompleteTextView:

<AutoCompleteTextView android:id="@+id/autocomplete_textview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:completionHintView="@layout/completion_hint_view"/>

Этот второй вариант, вероятно, самый простой в использовании и даст вам полный доступ к параметрам TextView. Если вам нужно применить несколько стилей к тексту в этом представлении, вы можете включить первое предложение, так как это даст вам большую гибкость.

Если ни один из этих предложений не достаточен, я могу придумать некоторые менее элегантные работы, которые, вероятно, позволят вам получить тот же результат.