AutoCompleteTextView和MultiAutoCompleteTextView

android提供了自动提示功能的textview,按照自带的文档和api demo可以写几行代码就可以实现此功能。但默认的thresh为2,所以默认情况下你必须输入两个或者两个以上的字符,才会有自动提示功能,否则AutoCompleteTextView是不会有任何提示的。当然你可以通过setThresh来设置至少输入几个字符后才会有提示,也可以在xml里设置。 AutoCompleteTextView会把你所有的字符串当做子串去做匹配, 而MultiAutoCompleteTextView会根据你提供tokenizer来分解你已经输入的字符串,并对符合条件的最后几个字符当做子串去做自动提示。

   例如做了一下设置,MultiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

那么当你输入  “It” 时,它会提示你Italy, 然后你选择这个字符串。此时在textview中的字符串为 "Italy", 紧接着再输入",It", 此时字符串为在textview中位 “Italy,It”,那么此时MultiAutoCompleteTextView根据你设置的分词方式(CommaTokenizer),分解出 "It",然后再匹配一次, 又会提示Italy.这就是Multi的由来。支持多个单词的提示,当然必须设置正确的分词方式(Tokenizer)。

 

一、AutoCompleteTextView

1、简介

一个继承自EditView可编辑的文本视图,能够实现动态匹配输入的内容。如google搜索引擎当输入文本时可以根据内容显示匹配的热门信息。

2、重要方法

clearListSelection():清除选中的列表项

dismissDropDown():如果存在关闭下拉菜单

getAdapter():获取适配器

 

二、MultiAutoCompleteTextView

1、简介

一个继承自AutoCompleteTextView可编辑的文本视图,能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。

用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串。

2、重要方法

enoughToFilter():当文本长度超过阈值时过滤

performValidation():代替验证整个文本,这个子类方法验证每个单独的文字标记

setTokenizer(MultiAutoCompleteTextView.Tokenizer t):用户正在输入时,tokenizer设置将用于确定文本相关范围内

以下为案例

main.xml布局文件

复制代码
<?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">
    <AutoCompleteTextView android:id="@+id/autoCompleteTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    <MultiAutoCompleteTextView android:id="@+id/multiAutoCompleteTextView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>
复制代码

TextViewActivity类

复制代码
package com.ljq.activity;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;

public class TextViewActivity extends Activity {
    //福建九地市
    private static final String[] cities=new String[]
        {"FuZhou", "XiaMen", "NiDe", "PuTian","QuanZhou", "ZhangZhou", "LongYan", "SanMing","NanPing"};
    private AutoCompleteTextView autoCompleteTextView=null;
    private MultiAutoCompleteTextView multiAutoCompleteTextView=null;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        autoCompleteTextView=(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
        multiAutoCompleteTextView=(MultiAutoCompleteTextView)findViewById(R.id.multiAutoCompleteTextView);
        
        //创建适配器
        ArrayAdapter<String> adapter=new ArrayAdapter<String>(
                this, 
                android.R.layout.simple_dropdown_item_1line, 
                cities);
        autoCompleteTextView.setAdapter(adapter);
        //设置输入多少字符后提示,默认值为2
        autoCompleteTextView.setThreshold(2);
        
        multiAutoCompleteTextView.setAdapter(adapter);
        multiAutoCompleteTextView.setThreshold(2);
        //用户必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串。
        multiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
    }
}
复制代码

运行结果


/

MultiAutoCompleteTextView

可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配

可用在发短信,发邮件时选择联系人这种类型当中。

使用时需要执行设置分隔符方法

 

AutoCompleteTextView

支持基本的自动完成功能,适用在各种搜索功能中,并且可以根据自己的需求设置他的默认显示数据

 

两个控件都可以很灵活的预置匹配的那些数据,并且可以设置输入多少值时开始匹配等等功能

 

效果图

 

示例:

主布局文件

multi_textview.xml

 

Xml代码   收藏代码
  1. <MultiAutoCompleteTextView  
  2.         android:layout_height="wrap_content" android:layout_width="fill_parent"  
  3.         android:id="@+id/multi_txt"></MultiAutoCompleteTextView>  
  4.     <AutoCompleteTextView  
  5.         android:layout_height="wrap_content" android:layout_width="fill_parent"  
  6.         android:id="@+id/auto_txt"></AutoCompleteTextView>  
 

 

 

数据适配布局文件

multi_item.xml

 

Xml代码   收藏代码
  1. <TextView android:id="@+id/subject"  
  2.     xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent" android:layout_height="30px"  
  4.     android:singleLine="true"   
  5.     android:ellipsize="end" />  
 

 

 

资源文件

string.xml

 

Xml代码   收藏代码
  1. <resources>  
  2.     <string-array name="mutilstring">  
  3.         <item>test1</item>  
  4.         <item>test2</item>  
  5.         <item>test3</item>  
  6.     </string-array>  
  7. </resources>  
 

 

 

执行数据绑定

 

Java代码   收藏代码
  1. //数据适配准备  
  2. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,  
  3.         R.layout.multi_item, getResources().getStringArray(  
  4.                 R.array.mutilstring));  
  5.   
  6. //多匹配的自动完成  
  7. MultiAutoCompleteTextView mtxt = (MultiAutoCompleteTextView) findViewById(R.id.multi_txt);  
  8. //设置适配  
  9. mtxt.setAdapter(adapter);  
  10. // 设置输入多少字符时自动匹配  
  11. mtxt.setThreshold(2);  
  12. // 设置分隔符  
  13. mtxt.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());  
  14.   
  15. //单一的自动完成  
  16. AutoCompleteTextView auto_txt = (AutoCompleteTextView) findViewById(R.id.auto_txt);  
  17. auto_txt.setAdapter(adapter);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值