我们在一些网站上时常会见到这些情景,当我们在输入框输入文字的时候,文本框中会出现一些关联的词语,比如在google或者baidu搜索框中输入东西的时候显得尤为常见,下面我照样按照动作步骤来在Android上实现这一功能。
动作一
创建AutoCompleteTextViewTest项目工程,这是我完成之后的目录结构:
动作二
在布局文件main.xml中,添加一些代码,这里这是添加了AutoCompleteTextView和MultiAutoCompleteTextView这两个控件,完整内容如下:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="@string/hello" />
- <AutoCompleteTextView
- android:id="@+id/myAutoCompleteTextView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- <MultiAutoCompleteTextView
- android:id="@+id/myMultiAutoCompleteTextView"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
动作三
下面就是最主要的AutoCompleteTextViewActivity.java文件了,大部份内容我已经注释了,完整代码如下:
- package org.ourunix.android.autocompletetextviewtest;
- import android.app.Activity;
- import android.os.Bundle;
- import android.widget.ArrayAdapter;
- import android.widget.AutoCompleteTextView;
- import android.widget.MultiAutoCompleteTextView;
- //android提供了自动提示功能的textview,按照自带的文档和api demo可以写几行代码就可以实现此功能。但默认的thresh为2,所以默认情况下你必须输入两个或者两个以上的字符,才会有自动提示功能,否则AutoCompleteTextView是不会有任何提示的。当然你可以通过setThresh来设置至少输入几个字符后才会有提示,也可以在xml里设置。 AutoCompleteTextView会把你所有的字符串当做子串去做匹配, 而MultiAutoCompleteTextView会根据你提供tokenizer来分解你已经输入的字符串,并对符合条件的最后几个字符当做子串去做自动提示。
- //
- //例如做了一下设置,MultiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
- //
- public class AutoCompleteTextViewActivity extends Activity {
- private AutoCompleteTextView mAutoCompleteTextView;
- private MultiAutoCompleteTextView mMultiAutoCompleteTextView;
- private static final String[] autoString = { "ni", "nihao", "nihaoa",
- "nihaohuaia" };
- private ArrayAdapter<String> adapter;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- adapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_dropdown_item_1line, autoString);
- mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.myAutoCompleteTextView);
- mAutoCompleteTextView.setAdapter(adapter);
- mMultiAutoCompleteTextView = (MultiAutoCompleteTextView) findViewById(R.id.myMultiAutoCompleteTextView);
- mMultiAutoCompleteTextView.setAdapter(adapter);
- mMultiAutoCompleteTextView
- .setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
- }
- }
动作四
运行AutoCompleteTextViewTest,效果如下:
这个是AutoCompleteTextView
这个是MultiAutoCompleteTextView
值得一提的是,AutoCompleteTextView和MultiAutoCompleteTextView这两种自动提示框有什么区别呢,可以由上图看得出来,后者可以将字符串分割开来之后仍然能够自动提示,这是前者做不到的。
源码:AutoCompleteTextViewTest