【Android基础篇】AutoCompleteTextView和MultiAutoCompleteTextView

从名称上可看出来,这两个控件都是用于输入信息的TextView,AutoComplete已表明这两个控件内容输入都是自动完成的。区别在于一个是Multi,一个不是,具体的区别可通过下面的内容看出来。下面分别介绍着两个控件的使用。


AutoCompleteTextView

功能

动态匹配输入的内容,如搜索引擎在输入框输入信息时,会有一个下拉列表显示与当前输入内容有关的信息。

控件特有属性

如同width、height等属性是控件共有属性,下面介绍AutoCompleteTextView特有的属性:

- android:completionThreshold : 此属性用于设置当输入多少字符时控件开始进行自动匹配

- android:completionHint : 设置出现在下拉菜单中的提示标题

- android:dropDownHorizontalOffset : 下拉菜单于文本框之间的水平偏移。默认与文本框左对齐

- android:dropDownHeight : 下拉菜单的高度

- android:dropDownWidth : 下拉菜单的宽度

- android:singleLine : 单行显示

- android:dropDownVerticalOffset : 垂直偏移量

如下,设置控件在输入1个字符后就开始自动匹配

<AutoCompleteTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        android:completionThreshold="1" />

控件在Activity中的使用

AutoCompleteTextView在Activity中的使用分为三步:

1. 实例化控件,即通过findViewById找到控件

2. 准备数据源,数据源里的数据将与输入内容进行匹配,匹配的就显示在下拉列表里

3. 设置适配器,这一步与ListView等控件一样,我们需要适配器将数据域与界面连接起来

下面是一个实例:

1.创建工程

2.修改 actiivty_main 如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.twotextview.MainActivity" >

    <AutoCompleteTextView
        android:id="@+id/tv_auto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:completionThreshold="1" />

</RelativeLayout>

3.MainActivity中代码:

package com.twotextview;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;

public class MainActivity extends ActionBarActivity {

 private AutoCompleteTextView autoCompleteTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1. 实例化控件
        this.autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.tv_auto);

        // 2. 准备数据源,即下拉列表中显示的数据
        String[] datas = new String[]{
         "Hello",
         "Hay",
         "Ha",
         "World",
         "Word",
         "Wa!"
        };

        // 3. 设置适配器,为控件填充数据
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1,datas);
        this.autoCompleteTextView.setAdapter(adapter);

    }

}

4.运行结果如下:

因为我们只是做一个简单的Demo,所以在适配器的选择上,选择了最简单的ArrayAdapter,如果要显示图文结合的,可以使用BaseAdapter或SimpleAdapter。


MultiAutoCompleteTextView

功能

可支持用分隔符分开来选择多个值,比如在发送邮件时的选择联系人、个性化设置里选择个人标签等。

在输入第一个值时,它能自动匹配,选择完后,输入分隔符,在输入内容时,它又可以自动匹配。

实现步骤

  1. 实例化控件,即通过findViewById找到控件
  2. 准备数据源,数据源里的数据将与输入内容进行匹配,匹配的就显示在下拉列表里
  3. 设置适配器,这一步与ListView等控件一样,我们需要适配器将数据域与界面连接起来
  4. 设置分隔符,可以自己创建分隔符Tokenizer,也可以使用内部的默认以英文逗号为分隔符的Tokenizer

下面是实例:

1.创建工程(也可以在上一个工程的基础上修改)

2.修改 activity_main 文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.twotextview.MainActivity" >

    <MultiAutoCompleteTextView
        android:id="@+id/tv_multiAuto"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:completionThreshold="1"
        />

</RelativeLayout>

3.修改MainActivity:

package com.twotextview;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView;

public class MainActivity extends ActionBarActivity {

 private MultiAutoCompleteTextView multiAutoCompleteTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1. 实例化控件
        this.multiAutoCompleteTextView = (MultiAutoCompleteTextView) findViewById(R.id.tv_multiAuto);

        // 2. 准备数据源,即下拉列表中显示的数据
        String[] datas = new String[]{
         "Hello",
         "Hay",
         "Ha",
         "World",
         "Word",
         "Wa!"
        };

        // 3. 设置适配器,为控件填充数据
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1,datas);
        this.multiAutoCompleteTextView.setAdapter(adapter);

        // 4. 设置分隔符
        this.multiAutoCompleteTextView.setTokenizer(
          new MultiAutoCompleteTextView.CommaTokenizer());
    }

}

其中与AutoCompleteTextView有所区别也只有设置分隔符这一步;

4.运行结果:

在输入了三条内容后,在输入逗号分隔符后,又可以开始自动匹配。



注:如果要使用自己自定义的分隔符,需要写一个类继承Tokenizer接口,然后实现里面的方法。这里可以先查看MultiAutoCompleteTextView.CommaTokenizer()的源码,然后再自己实现。附录一下源码:

/**
     * This simple Tokenizer can be used for lists where the items are
     * separated by a comma and one or more spaces.
     */
    public static class CommaTokenizer implements Tokenizer {
        public int findTokenStart(CharSequence text, int cursor) {
            int i = cursor;

            while (i > 0 && text.charAt(i - 1) != ‘,‘) {
                i--;
            }
            while (i < cursor && text.charAt(i) == ‘ ‘) {
                i++;
            }

            return i;
        }

        public int findTokenEnd(CharSequence text, int cursor) {
            int i = cursor;
            int len = text.length();

            while (i < len) {
                if (text.charAt(i) == ‘,‘) {
                    return i;
                } else {
                    i++;
                }
            }

            return len;
        }

        public CharSequence terminateToken(CharSequence text) {
            int i = text.length();

            while (i > 0 && text.charAt(i - 1) == ‘ ‘) {
                i--;
            }

            if (i > 0 && text.charAt(i - 1) == ‘,‘) {

                return text;
            } else {
                if (text instanceof Spanned) {
                    SpannableString sp = new SpannableString(text + ", ");
                    TextUtils.copySpansFrom((Spanned) text, 0, text.length(),
                                            Object.class, sp, 0);
                    return sp;
                } else {
                    return text + ", ";
                }
            }
        }
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-12 12:40:26

【Android基础篇】AutoCompleteTextView和MultiAutoCompleteTextView的相关文章

android基础篇学习心得

android技术中,线程.进程.JNI.IPC和各个小框架结构是基本功.在跟随高焕堂老师的android程序猿到架构师之路系列视频中 学习完基础篇之后,颇有些心得,记录下来. android开发就是app开发吗?曾听过很多人说android学习很简单,做个app轻松就上手了.我一直觉得不以为然,许多程序员做app开发时,心中大致只有四大组件.各种布局.数据库和一些常用控件.对于各小框架.线程间通信.绑定服务.java与c的对接等基本原理并不清楚,也没必要弄清楚. 最近学校搞了一个实训,要求做一

Android学习之AutoCompleteTextView和MultiAutoCompleteTextView

转自:http://blog.csdn.net/qq_28468727/article/details/52258409 AutoCompleteTextView.MultiAutoCompleteTextView自动完成输入内容的控件 如果我们想实现用户输入的内容有自动提示功能,类似百度搜索结果,AutoCompleteTextView和MultiAutoCompleteTextView可以实现类似功能 MainActivity.JAVA: public class MainActivity

Android控件——AutoCompleteTextView与MultiAutoCompleteTextView(实现自动匹配输入的内容)

------------------------------------AutoCompleteTextView---------------------- 1.使用方法 布局文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=

Android学习起步 - AutoCompleteTextView及MultiAutoCompleteTextView控件使用

大家在用百度搜索时,输入几个词就出现下拉框可选,以下两个控件就具有这个功能 AutoCompleteTextView:只能匹配输入的开始,只有一次匹配 MultiAutoCompleteTextView:可以匹配多次输入,用分隔符来分隔每一次的输入,就像发邮件时选多个联系人一样,见例子: 一.AutoCompleteTextView的效果实现如下 布局文件如下 1 <?xml version="1.0" encoding="utf-8"?> 2 <

从0开始不断温习,Android基础篇

(^▽^)经常发现学着学着,由于学习的东西越来越多,接触的东西越来越多,逐渐的吧自己的最基础的东西忘得差不多了(o(╥﹏╥)o我也差不多忘了很多东西了)发现越优秀的人 越注重细节,基础更加扎实和巩固 分享一下自己整理的面试学习路线 请查看完整的PDF版(更多完整项目下载.未完待续.源码.图文知识后续上传github.)可以点击关于我联系我获取完整PDF(VX:mm14525201314) 一.Activity 是什么? Activity 实际上只是一个与用户交互的接口而已 二.Activity

【Android基础篇】Activity的生命周期

Google开发者文档 http://developer.android.com/reference/android/app/Activity.html 应用的每个页面都是一个Activity,这些Activity都存放在一个Activity栈中,每次进入某个应用或者应用的某个界面时,新界面这个Activity就压入到Activity栈的顶部:退出或返回的时候就把栈顶的Activity弹出,之前的Activity就又到了栈顶. Activity生命周期里的四个状态 - Running : Act

【android基础篇】ContextProvider基本认识

ContentProvider即内容提供者.安卓的四大组件之一.I,ContextProvider的用途 对于市面上有很多软件有这么一些功能,比如:读取联系人,短信备份等.而系统的短信以及联系人都是以数据库文件形式存储着.但是这些文件对于其他访问者的权限是不可读不可写.那么那些短信备份,读取联系人这些功能又是怎么实现的呢?其实这里,靠的就是内容提供者. 可以把内容提供者想象成证监会和股民之间的中间人,这个中间人可能是证监会某个内部人员的亲戚朋友,它可以提供有效的信息给股民.但是如果证监会遵纪守法

android基础篇:提示框AlertDialog实例

string.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestBase</string> <string name="city_name">城市</string> <string name="city_default&quo

【Android基础篇】使用ExpandableListView实现自定义的下拉列表

1. ExpandableListView简介 下拉列表(可扩展的列表控件)在App应用非常常见,在Android开发中是我们必须掌握的一个控件,下面就来介绍一下ExpandableListView这个控件的开发. ExpandableListView分为组列表项和子列表项,单击组列表项,会显示这组里所有的子列表项.和ListView一样,它也是通过Adapter数据适配器完成数据与显示的衔接,但它使用的另一种接口:ExpandableListAdapter. 今天我们要做的是实现一个继承它的父