1、现实场景
想象这样一个场景:上网搜索时,只要输入几个文字,搜索框就会提示相近的关键字。Android提供了这种功能的控件-AutoCompleteTextView。
2、AutoCompleteTextView简介
AutoCompleteTextView是一个文本框组件,它提供了自动完成文本功能。用户只需输入一部分内容,剩下部分系统就会给予提示。
3、AutoCompleteTextView的工作原理
AutoCompleteTextView的自动提示功能需要适配器(adapter)提供数据。数据适配器相当于是数据与控件之间的中间桥梁,建立了数据源与控件之间的适配关系,可以使用系统自带适配器,如ArrayAdapter、SimpleAdapter直接适配数据,也可以继承与BaseAdapter自定义复杂的数据源。从而将数据源转换为控件能够显示的数据格式,从而将数据的来源与数据的显示进行解耦,降低程序的耦合性。
4、常用的数据适配器
ArrayAdapter:支持泛型操作,填充数组和List集合数据,常用于显示文本列表。
SimpleAdapter:填充List<? extends Map<String,?>>格式的数据,可以自定义多种效果,显示更丰富的列
SimpleCursorAdapter:填充Cursor(数据库查询结果集)数据。
BaseAdapter:抽象类,实际开发中会继承这个类并且重写相关方法,自定义填充数据方式和显示方法。
5、为AutoCompleteTextView提供数据操作步骤
通过findViewByID方法建立对象
提供数据:数据源可以是数组、XML文件、集合等;
提供布局;
建立适配器ArrayAdapter 关联适配器
6、【实例】利用AutoCompleteTextView实现了电话号码自动输入的UI。
7、代码实现
(1)布局文件代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.autocompletetextview.MainActivity" >
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="请输入手机号..."
android:id="@+id/actv"/>
</RelativeLayout>
(2)源文件代码
package com.example.autocompletetextview;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
public class MainActivity extends Activity {
AutoCompleteTextView actv;
String []tel={"10010","10086","10011"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actv=(AutoCompleteTextView) findViewById(R.id.actv);
ArrayAdapter<String> adapter =new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_dropdown_item_1line, tel);
actv.setAdapter(adapter);
}
}
(3)运行截图