一.自动完成文本框的基础知识
在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android 中是用AutoCompleteTextView实现的。
(一)效果:
AutoCompleteTextView继承与EditText,拥有EditText的所有属性和方法。
(二)XML配置:
<AutoCompleteTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:completionThreshold="2"/>
(三)常用属性:
- android:completionHint 用于弹出的下拉菜单指定提示标题
- android:completionThreshold 用于指定用户至少输入几个字符才会显示提示
- android:dropDownHeight 用于指定下拉菜单的高度
- android:dropDownHorizontalOffset 用于指定下拉腰间与文本之间的水平偏移.下拉腰间默认与文本左对齐
- android:dropDownVerticalOffset 用于指定下拉腰间与文本之间的垂直领衔.下拉 菜单默认紧跟文本框
- android:dropDownWidth 用于指定下拉菜单的宽度
- android:popupBackground 用于为下拉菜单设置背景
(四)适配器:
AutoCompleteTextView组件必须设置数据,一般是字符串数组,而我们需要将视图与数据 组装起来,那么这时我们就需要使用到适配器了
使用setAdapter(adapter)方法传入适配器
如果每一行是的文本内容,传入最简单的适配器ArrayAdapter就可以了。
如果要显示图像加文本或更加复杂的内容,就要使用SimpleAdapter或Base Adapter。
二.简单示例的演示
(一)布局文件activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!-- 自动完成文本框 -->
<MultiAutoCompleteTextView
android:id="@+id/main_mact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:hint="输入姓名"
android:singleLine="true" />
</RelativeLayout>
(二)java代码设计
package com.example.lesson7_multiautocompletetextview;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.MultiAutoCompleteTextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 实例化对象
MultiAutoCompleteTextView mact = (MultiAutoCompleteTextView) findViewById(R.id.main_mact);
// 数据源
String array[] = { "limei", "wangmei", "liming", "jianglan",
"huangbei", "lihong", "liwen" };
//创建Adapter,这里的android.R.layout.simple_list_item_1是Android系统中创建好的布局文件
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, array);
//设置可以添加多个人以道号来区分添加的人
mact.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
mact.setAdapter(adapter);
}
}
程序运行后的效果:
输入简单字符后显示的效果:
点击选择后,再输入的效果:
这里代码已经设置可以多次选择,并在后面添加,如果没有设置在后面添加是会把原来选择的内容替换掉的。
这里也可以想EditText一样获取文本框内输入的信息,进行相应的操作。
这里的数据也可以是从本地中或数据库中获取到的数据;
这里每一行是视图也可以显示很复杂的界面,这就需要设置更加复杂的Adapter,比如SimpleAdapter或BaseAdapter。
这里有详细介绍Adapter的文章:
http://blog.csdn.net/wenzhi20102321/article/details/52796163?locationNum=11&fps=1