通过Google上网搜索时,只要输入几个文字,就会显示相近的关键字让你挑选,而这种效果其实在Android中是非常容易达到的。事实上,Android的AutoCompleteTextView Widget,只要搭配ArrayAdapter就能设计出类似Google搜索提示的效果。
本范例先在Layout当中布局一个AutoCompleteTextView Widget,然后通过预先设置好的字符串数组,将此字符串数组放入ArrayAdapter,最后利用AutoCompleteTextView.setAdapter方法,就可以让AutoCompleteTextView Widget具有自动完成提示的功能。例如,只要输入ab,就会自动带出包含ab的所有字符串列表。
本范例程序主要示范AutoCompleteTextView用法,再次使用到ArrayAdapter,只要是有下拉菜单的项目,都必须使用到ArrayAdapter对象。此外,将ArrayAdapter添加AutoComplete TextView对象中,所使用的方法为setAdapter,当中传输唯一的参数类型即为字符串类型的ArrayAdapter。
/* import程序略 */
public class EX04_13 extends Activity
{
private static final String[] autoStr = new String[]
{ "a", "abc", "abcd", "abcde" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/*加载main.xml Layout */
setContentView(R.layout.main);
/* new ArrayAdapter对象并将autoStr字符串数组传入 */
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, autoStr);
/* 以findViewById()取得AutoCompleteTextView对象 */
AutoCompleteTextView myAutoCompleteTextView =
(AutoCompleteTextView) findViewById(R.id.myAutoCompleteTextView);
/* 将ArrayAdapter添加AutoCompleteTextView对象中 */
myAutoCompleteTextView.setAdapter(adapter);
}
}
有个类似AutoCompleteTextView的对象,称为MultiAutoCompleteTextView,它继承了Auto CompleteTextView,差别在于它可以在输入框一直增加新的选择值,其编写方式也有些不同,一定要setTokenizer,否则会出现错误,以下范例是传入CommaTokenizer类,结果会将原本选择框里的值往后加逗号及空白。
package irdc.ex04_13;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;
public class EX04_13 extends Activity
{
private static final String[] autoStr = new String[]
{ "a", "abc", "abcd", "abcde" };
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/*加载main.xml Layout */
setContentView(R.layout.main_1);
/* new ArrayAdapter对象并将autoStr字符串数组传入 */
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, autoStr);
/* 以findViewById()取得MultiAutoCompleteTextView对象 */
MultiAutoCompleteTextView myAutoCompleteTextView =
(MultiAutoCompleteTextView)
findViewById(R.id.myAutoCompleteTextView);
/* 将ArrayAdapter添加AutoCompleteTextView对象中 */
myAutoCompleteTextView.setAdapter(adapter);
myAutoCompleteTextView.setTokenizer
(new MultiAutoCompleteTextView.CommaTokenizer());
}
}