AutocompleteTextview и CompletionHintView - PullRequest
       5

AutocompleteTextview и CompletionHintView

17 голосов
/ 01 сентября 2010

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

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

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

1 Ответ

5 голосов
/ 06 ноября 2011

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

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

Если вы ищете способ фактически манипулировать параметрами TextView (например, padding), исходный код из 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 с таким идентификатором:

<?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.Если вам нужно применить несколько стилей к тексту в этом представлении, вы можете включить первое предложение, поскольку это даст вам большую гибкость.

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

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