Віджет автодоповнення AutoCompleteTextView
AutoCompleteTextView представляє елемент, створений на основі класу EditText, і має можливість автодоповнення.
По-перше, оголосимо в ресурсі розмітки цей елемент:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<AutoCompleteTextView
android:id="@+id/autocomplete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:completionHint="Введіть місто"
android:completionThreshold="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Атрибут android:completionHint дозволяє задати напис, який відображається внизу списку, а властивість android:completionThreshold встановлює, яку кількість символів треба ввести, щоб почало працювати автодоповнення. Тобто в даному випадку вже після введення одного символа має з'явитися список з підстановками.
Як і у випадку з елементами ListView та Spinner, AutoCompleteTextView підключається до джерела даних через адаптер. Джерелом даних може бути масив або список об'єктів, або ресурс string-array.
Тепер підключимо до віджету масив рядків у класі MainActivity:
package com.example.listapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends AppCompatActivity {
String[] cities = {"Київ", "Миколаїв", "Херсон", "Львів", "Чернівці", "Житомир"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Отримуємо посилання на елемент AutoCompleteTextView в розмітці
AutoCompleteTextView autoCompleteTextView = findViewById(R.id.autocomplete);
// Створюємо адаптер для автозаповнення елемента AutoCompleteTextView
ArrayAdapter<String> adapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, cities);
autoCompleteTextView.setAdapter(adapter);
}
}
Після введення в текстове поле однієї літери відобразиться список з варіантами автодоповнення, де можна вибрати бажаний варіант:

MultiAutoCompleteTextView
Цей віджет доповнює функціональність елемента AutoCompleteTextView. MultiAutoCompleteTextView дозволяє використовувати автодоповнення не тільки для одного рядка, але й для окремих слів. Наприклад, якщо вводиться слово, і після нього ставиться кома, то автозаповнення все одно буде працювати для нововведених слів після коми або іншого роздільника.
MultiAutoCompleteTextView має таку ж форму оголошення, як і AutoCompleteTextView:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
<MultiAutoCompleteTextView
android:id="@+id/autocomplete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:completionHint="Введите город"
android:completionThreshold="1"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Щоб увімкнути MultiAutoCompleteTextView у коді, треба встановити токен роздільника:
package com.example.listapp;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.MultiAutoCompleteTextView;
public class MainActivity extends AppCompatActivity {
String[] cities = {"Київ", "Миколаїв", "Херсон", "Львів", "Чернівці", "Житомир"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Отримуємо посилання на елемент AutoCompleteTextView у розмітці
MultiAutoCompleteTextView autoCompleteTextView = findViewById(R.id.autocomplete);
// Створюємо адаптер для автозаповнення елемента MultiAutoCompleteTextView
ArrayAdapter<String> adapter = new ArrayAdapter(this, R.layout.support_simple_spinner_dropdown_item, cities);
autoCompleteTextView.setAdapter(adapter);
// встановлення коми як роздільника
autoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
}
}
Тут як роздільник використовується вбудований роздільник на основі коми CommaTokenizer(). За необхідності ми можемо створити свої роздільники.
