我们平时上网的时候免不了要用到搜索引擎,其中最常用的莫过于百度、谷歌了。相信大家都注意过,在我们搜索框中输入文本的时候,会文本框会自动弹出下拉菜单提示,自动匹配用户输入的内容。今天我们要实现的就是个功能。
要 实现这个功能,我们需要一个组件,就是AutoCompleteTextView,这是一个文本框控件,继承自TextView。与TextView不同 的是,当用户在文本框中输入文本的时候,文本框会自动弹出一个列表框方便用户选择。当用户点下列表框中的选项是,该条选项会代替文本框中的原有内容。当用 户按返回键或者Enter键时,下拉列表框会自动消失。
下拉列表框中的内容是从一个数据Adaptor中获取的,并且只有在用户输入规定的字符后才会开始显示,这个规定的字符控制由函数public void setThreshold (int threshold)确定。或者可以在xml文件中声明,即android:completionThreshold="1",表示在用户输入一个字符的时候开始出现下拉列表提示。
1.首先,我们在xml文件中声明一个AutoCompleteTextView控件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Country" />
<AutoCompleteTextView
android:completionThreshold="1"
android:id="@+id/autocomplete_country"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"/>
</LinearLayout>
2.在res/layout文件夹下新建一个xml文件,文件名为list_item.xml,设置如下:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff"
android:padding="10dp"
android:textSize="16sp"
android:textColor="#000000">
</TextView>
说明:大家可能会很奇怪,为什么要这个布局文件,不是已经有了一个main.xml的布局文件了吗,这里说明一下,我们知道,下拉列表是一条一条的文字显示,我们这里的一个TextView就是用来显示每一条列表用的。
3.编写主程序
package com.demo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;public class DemoActivity extends Activity
{
//变量应该在内部获取,这一点不要忘记,常量可以放在外面
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
String[] countries = new String[]{"Afghanistan","Albania","Algeria","American Samoa","Andorra"};//这里只举例说明,数据较少
AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView)findViewById(R.id.autocomplete_country);//找到相应的控件
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, countries);//配置Adaptor
autoCompleteTextView.setAdapter(adapter);
}
}
到这里就全部完成了,运行截图如下:
这里要说明一下,我们上面是把String[],即国家名称字符串放在主程序代码中,这样做其实不太好,谷歌官方也不推荐这么做,标准的做法是把这些字符串放入value/string.xml文件中,具体如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="countries_array">
<item>Bahrain</item>
<item>Bangladesh</item>
<item>Barbados</item>
<item>Belarus</item>
<item>Belgium</item>
<item>Belize</item>
<item>Benin</item>
</string-array>
</resources>
在出程序中调用如下:
String[] countries = getResources().getStringArray(R.array.countries_array);
其他地方不变。