自动完成文本框的功能和用法

       自动完成文本框(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程序得如下效果:

posted @ 2013-10-20 14:47  TealerProg  Views(1086)  Comments(0Edit  收藏  举报