В этой статье мы научимся получать подсказки с помощью компонента AutoCompleteTextView
. Как обычно, рассмотрим все на простом примере.
Виджет AutoCompleteTextView в Android. Теория
Виджет AutoCompleteTextView
показывает подсказки во время ввода текста пользователем. Список этих подсказок отображается в виде раскрывающегося меню, из которого пользователь может выбрать подходящую подсказку. Набор всех возможных подсказок предоставляется адаптером и появляется только после того, как пользователь введет несколько символов.
В XML макете виджет определяется следующим образом:
1 2 3 4 5 |
<AutoCompleteTextView android:id="@+id/autoCompleteTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" > |
Обратите внимание на атрибут a
ndroid:ems
. Он устанавливает ширину виджета TextView
, независимо от фактического размер вводимого текста.
Наиболее полезные методы при работе с виджетом AutoCompleteTextView
в коде:
- Метод
setAdapter()
устанавливает адаптер в виджетAutoCompleteTextView
. - Метод
getAdapter()
возвращает адаптер, используемый для автоматического предоставления подсказок - Метод
getCompletionHint()
возвращает текст, отображаемый в нижней части списка подсказок. - Метод
getDropDownAnchor()
возвращает возвращает идентификатор View, к которому отностится выпадающий список. - Метод
getListSelection()
возвращает позицию элемента из выпадающего списка. - Метод
isPopupShowing()
определяет, показано всплывающее меню или нет - Метод
setText(CharSequence text, boolean filter)
устанавливает текст в виджет с позможностью отключить фильтрацию - Метод
showDropDown()
показывает выпадающий список
Виджет AutoCompleteTextView в Android. Пример
В нашем примере мы используем виджет TextView
и AutoCompleteTextView
в компоновке RelativeLayout. В коде мы будем использовать ArrayAdapter
со списком каких-либо элементов. Для простоты примера мы будем использовать захардкоденные данные в массиве. В реальном же приложении эти данные будут предоставлены из базы данных или от какого-либо интернет-сервиса.
XML файл компоновки приведен ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:text="@string/hint_text_textview" /> <AutoCompleteTextView android:id="@+id/autoCompleteTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textView" android:layout_centerHorizontal="true" android:ems="10" android:hint="@string/hint_auto_complete"> <requestFocus /> </AutoCompleteTextView> </RelativeLayout> |
Ниже приведен листинг класса MainActivity
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
package ua.com.prologistic; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; public class MainActivity extends AppCompatActivity { // это наш захардкоденный массив языков программирования String[] languages = new String[]{ "Java", "PHP", "C#", "Python" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // инициализируем ArrayAdapter стандартной // компоновкой select_dialog_item и массивом languages ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.select_dialog_item, languages); // получаем экземпляр AutoCompleteTextView AutoCompleteTextView autoCompleteWidget = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView); // начинаем искать подсказки с первого введенного символа autoCompleteWidget.setThreshold(1); // устанавливаем адаптер с данными в AutoCompleteTextView autoCompleteWidget.setAdapter(adapter); // выделяем вводимый текст синим autoCompleteWidget.setTextColor(Color.BLUE); } } |
В приведенном выше коде, мы сохранили список в ArrayAdapter
со стандартной Android компоновкой. Обратите внимание, что методом setThreshold(1)
мы указали на необходимость появления списка с подсказками после ввода всего лишь одного символа.
Обратите внимание, что список с подсказками виден только когда поле ввода получило фокус.
Ниже представлен результат использования виджета AutoCompleteTextView
в Android:
Подписывайтесь на новые статьи по Java и Android.