Немедленно показать автозаполнение на Android

Автозаполнение Android начинается только после двух букв. Как я могу сделать так, чтобы список появлялся, когда поле только что выбрано?


person Mitchell    schedule 20.11.2010    source источник


Ответы (6)


Чтобы автозаполнение отображалось в фокусе, добавьте прослушиватель фокуса и покажите раскрывающийся список, когда поле получает фокус, например:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
  @Override
  public void onFocusChange(View view, boolean hasFocus) {
    if(hasFocus){
      editText.showDropDown();
    }
  }
});

Или просто вызовите editText.showDropDown(), если вам не нужна часть фокуса.

person Heinrisch    schedule 26.02.2013
comment
Этот работал лучше всего для меня. Я хотел, чтобы он отображался, когда пользователь нажимает на него, поэтому вместо Focus я использовал onClick. - person Ayush Goyal; 08.03.2013
comment
просто лаконично и... лучшее! - person Stefano Mtangoo; 31.07.2017
comment
спасибо, без этого пункты автозаполнения в диалоговом режиме сзади, - person Mehran Sahandi Far; 03.05.2021

Взгляните на метод setThreshold:

public void setThreshold (int threshold)
Начиная с: API уровня 1
Указывает минимальное количество символов, которое пользователь должен ввести в поле редактирования перед перетаскиванием. отображается нижний список.
Если пороговое значение меньше или равно 0, применяется пороговое значение 1.

person systempuntoout    schedule 20.11.2010
comment
Есть ли способ сделать его 0? - person Mitchell; 21.11.2010
comment
Когда порог меньше или равен 0, применяется порог 1. - person systempuntoout; 21.11.2010
comment
То есть нет способа сделать так, чтобы при простом выборе открывались все варианты? - person Mitchell; 21.11.2010
comment
@ Мит Афаик, это невозможно сделать. - person systempuntoout; 21.11.2010
comment
Что он должен автозаполнять, если нет текста? - person Falmarri; 21.11.2010
comment
@Falmarri все варианты автозаполнения? Это довольно распространенный вариант использования, когда вариантов меньше. - person Heinrisch; 04.12.2013

Расширьте AutoCompleteTextView, переопределив методы достаточного фильтра () и пороговые методы, чтобы он не заменял порог 0 на порог 1:

public class MyAutoCompleteTextView extends AutoCompleteTextView {

    private int myThreshold;

    public MyAutoCompleteTextView(Context context) {
        super(context);
    }

    public MyAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyAutoCompleteTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setThreshold(int threshold) {
        if (threshold < 0) {
            threshold = 0;
        }
        myThreshold = threshold;
    }

    @Override
    public boolean enoughToFilter() {
        return getText().length() >= myThreshold;
    }

    @Override
    public int getThreshold() {
        return myThreshold;
    }

}
person matt    schedule 15.12.2011
comment
Это не покажет раскрывающийся список сразу, вам все равно нужно будет начать печатать. - person Heinrisch; 26.02.2013

Для людей, которые хотят изменить порог с помощью SearchView, вы должны использовать:

SearchView.SearchAutoComplete complete = (SearchView.SearchAutoComplete)search.findViewById(R.id.search_src_text);
complete.setThreshold(0);
person Bartosz Kraszewski    schedule 27.07.2015

Дополните адаптер одним/двумя белыми символами слева в зависимости от настройки порога.

person Pentium10    schedule 20.11.2010

Альтернативный метод изменения настройки в вашем XML: как упоминалось другими, вам необходимо установить свой 'Порог автоматического завершения" на 1

Кроме того, что упоминал @systempuntoout.

Вы также можете сделать это в своем XML-файле, как показано ниже.

<AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/edittext_id"
    android:inputType="textAutoComplete"
    android:completionThreshold="1"
/>

Обратите внимание на строку: android:completionThreshold="1"

person Pranaysharma    schedule 10.02.2015