Android AutoCompleteTextView使用教程:完整示例与最佳实践
在Android应用程序中,AutoCompleteTextView是一个可编辑的文本视图,它在用户输入时自动显示完成建议。在本教程中,我们将使用ArrayAdapter来定义建议列表,并在我们的应用程序中实现Android的AutoCompleteTextView。
Android AutoCompleteTextView 概述
AutoCompleteTextView是一个组件,用于在可编辑文本字段中输入时显示建议内容。建议列表以下拉菜单的形式展示,用户可以从中选择所需的项。建议列表是从一个适配器中获取的,并且只有在达到指定的字符数阈值后才会显示出来。要使用AutoCompleteThreshold字段,需要在xml布局中进行定义,如下所示:
<AutoCompleteTextView
   android:id="@+id/autoCompleteTextView"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_alignParentTop="true"
   android:layout_centerHorizontal="true"
   android:layout_marginTop="65dp"
   android:ems="10" >
</AutoCompleteTextView>
注意:android:ems或setEms(x)会根据x个”M”字母的数量设置TextView的宽度,而不考虑实际文本的长度和字体大小。下面是一些Autocomplete列表的重要方法。
- getAdapter():此方法返回一个可过滤的列表适配器,用于自动完成
 - getCompletionHint():此方法返回底部匹配列表显示的可选提示文本
 - getDropDownAnchor():此方法返回自动完成下拉列表所附加到的视图的id
 - getListSelection():此方法返回下拉视图选择的位置(如果有的话)
 - isPopupShowing():此方法指示弹出菜单是否正在显示
 - setText(CharSequence text, boolean filter):此方法设置文本,但可以禁用过滤
 - showDropDown():此方法在屏幕上显示下拉菜单
 
setAdapter方法用于设置autoCompleteTextView的适配器。让我们转到其编码部分。
Android AutoCompleteTextView项目结构
这个项目在MainActivity的布局中包含一个简单的TextView和一个AutoCompleteTextView。ArrayAdapter中包含以下水果:苹果、香蕉、樱桃、枣、葡萄、猕猴桃、芒果、梨。
Android AutoCompleteTextView 示例代码
MainActivity的布局定义如下。activity_main.xml
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="15dp"
        android:text="请从以下水果中选择一种(苹果 香蕉 樱桃 枣 葡萄 猕猴桃 芒果 梨)" />
    <AutoCompleteTextView
        android:id="@+id/autoCompleteTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView"
        android:layout_marginLeft="36dp"
        android:layout_marginTop="17dp"
        android:ems="10"
        android:text="">
        <requestFocus />
    </AutoCompleteTextView>
</RelativeLayout>
下面是MainActivity.java的定义。
package com.Olivia.autocomplete;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity {
    String[] fruits = {"苹果", "香蕉", "樱桃", "枣", "葡萄", "猕猴桃", "芒果", "梨"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建包含水果名称列表的ArrayAdapter实例
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this, android.R.layout.select_dialog_item, fruits);
        //获取AutoCompleteTextView的实例
        AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        actv.setThreshold(1); //将从第一个字符开始工作
        actv.setAdapter(adapter); //将适配器数据设置到AutoCompleteTextView中
        actv.setTextColor(Color.RED);
    }
}

下载 Android AutoCompleteTextView 项目