自动完成文本框的功能和用法 MultiAutoCompleteTextView setTokenizer()

时间:2022-06-23 22:44:21

 自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上它也是一个文本编辑框,但它比普通编辑框多了一个功能;当用户输入一定字符之后,自动完成文本框会显示一个下拉菜单,供用户从中选择,当用户选择某个才菜单项之后,AutoCompleteTextView按用户选择自动填写该文本框。

使用AutoCompleteTextView很简单,只要为他设置一个Adapter,该Adapter封装了AutoCompleteTextView预设的提示文本。

AutoCompleteTextView还派生了一个子类:MultiAutoCompleteTextView,该子类的功能与AutoCompleteTextView基本相似,只是MultiAutoCompleteTextView允许输入多个提示项,多个提示项以分隔符分隔。MultiAutoCompleteTextView提供了setTokenizer()方法来设置分隔符。

下面的布局文件中包含了AutoCompleteTextView和MultiAutoCompleteTextView。布局文件代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<!-- 定义一个自动完成文本框,指定输入一个字符后进行提示 -->
<AutoCompleteTextView android:id="@+id/auto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionHint="请选择您喜欢的图书:"
android:dropDownHorizontalOffset="20dp"
android:completionThreshold="1" />
<!-- 定义一个MultiAutoCompleteTextView组件 -->
<MultiAutoCompleteTextView android:id="@+id/mauto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"/>

</LinearLayout>

上面的布局文件中定义了AutoCompleteTextView和MultiAutoCompleteTextView,接下来在程序中为他们绑定同一个Adapter,这意味着两个自动完成文本框的提示项完全相同,只是他们的表现行为略有差异。

Adapter负责为它提示提示文本。主程序如下:

package org.crazyit.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.*;

public class AutoCompleteTextViewTest extends Activity {
AutoCompleteTextView actv;
MultiAutoCompleteTextView mauto;
//定义字符串数组,作为提示的文本
String[] books=new String[]{"疯狂Java讲义",
"疯狂Ajax讲义",
"疯狂XML讲义",
"疯狂Workflow讲义"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.auto_complete_text_view_test);
//创建一个ArrayAdapter,封装数组
ArrayAdapter<String> aa=new ArrayAdapter<String>(this
,android.R.layout.simple_dropdown_item_1line,books);
actv=(AutoCompleteTextView)findViewById(R.id.auto);
//设置Adapter
actv.setAdapter(aa);
mauto=(MultiAutoCompleteTextView)findViewById(R.id.mauto);
//设置Adapter
mauto.setAdapter(aa);
//为MultiAutoCompleteTextView设置分隔符
mauto.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.auto_complete_text_view_test, menu);
return true;

}

}

上面的程序中粗体字代码负责为AutoCompleteTextView、MultiAutoCompleteTextView设置同一个Adapter,并为MultiAutoCompleteTextView设置了分隔符。

运行上面的Activity程序得如下效果:


自动完成文本框的功能和用法 MultiAutoCompleteTextView setTokenizer()