Android中实现文本框输入自动提示

时间:2022-09-22 19:21:46

我们平时上网的时候免不了要用到搜索引擎,其中最常用的莫过于百度、谷歌了。相信大家都注意过,在我们搜索框中输入文本的时候,会文本框会自动弹出下拉菜单提示,自动匹配用户输入的内容。今天我们要实现的就是个功能。

要 实现这个功能,我们需要一个组件,就是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);
    }
}

 到这里就全部完成了,运行截图如下:
Android中实现文本框输入自动提示
这里要说明一下,我们上面是把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);
其他地方不变。