How to use AutoCompleteTextView in Android?

AutoCompleteTextView is an editable text view that shows completion suggestions automatically while the user is typing. The list of suggestions is displayed in a drop down menu from which the user can choose an item. The list of suggestions is obtained from a data adapter, usually an array adapter.

auto-complete-text-view
AutoCompleteTextView

Let us create a simple AutoCompleteTextView to enter a countries and supported by a list of countries for auto completion.

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/autoCompleteTextView"
        android:hint="Enter Country"/>

</LinearLayout>

Some of the other XML attributes that you can define:

XML attributes
android:completionHint Defines the hint displayed in the drop down menu.
android:completionHintView Defines the hint view displayed in the drop down menu.
android:completionThreshold Defines the number of characters that the user must type before completion suggestions are displayed in a drop down menu.

In Java, create an array of the countries that you want to allow auto complete for.  Then, we create an ArrayAdapter of type String initialised by this array. An ArrayAdapter takes in 3 parameters: Context (Main Activity), layout resource id and the array (in this case the String array). For the layout, we use one of the default android provided simple dropdown layouts (android.R.layout.simple_dropdown_item_1line)

We then find the AutoCompleteTextView by id and set this ArrayAdapter to it.

Here’s the final java code:

public class MainActivity extends AppCompatActivity {
    private String[] countries = 
             {"India", "USA", "Russia", "China", "Japan", "Indonesia"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
     
        // Find the view
        AutoCompleteTextView autoCompleteTextView = 
                (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        // Create an array adapter initialised with the countries array
        ArrayAdapter adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_dropdown_item_1line, countries);
        // Set the adapter to the AutoCompleteTextView
        autoCompleteTextView.setAdapter(adapter);
    }
}