【Android基础篇】AutoCompleteTextView和MultiAutoCompleteTextView
2015-08-09 14:06
597 查看
从名称上可看出来,这两个控件都是用于输入信息的TextView,AutoComplete已表明这两个控件内容输入都是自动完成的。区别在于一个是Multi,一个不是,具体的区别可通过下面的内容看出来。下面分别介绍着两个控件的使用。
- android:completionThreshold : 此属性用于设置当输入多少字符时控件开始进行自动匹配
- android:completionHint : 设置出现在下拉菜单中的提示标题
- android:dropDownHorizontalOffset : 下拉菜单于文本框之间的水平偏移。默认与文本框左对齐
- android:dropDownHeight : 下拉菜单的高度
- android:dropDownWidth : 下拉菜单的宽度
- android:singleLine : 单行显示
- android:dropDownVerticalOffset : 垂直偏移量
如下,设置控件在输入1个字符后就开始自动匹配
1. 实例化控件,即通过findViewById找到控件
2. 准备数据源,数据源里的数据将与输入内容进行匹配,匹配的就显示在下拉列表里
3. 设置适配器,这一步与ListView等控件一样,我们需要适配器将数据域与界面连接起来
下面是一个实例:
1.创建工程
2.修改 actiivty_main 如下:
3.MainActivity中代码:
4.运行结果如下:
因为我们只是做一个简单的Demo,所以在适配器的选择上,选择了最简单的ArrayAdapter,如果要显示图文结合的,可以使用BaseAdapter或SimpleAdapter。
在输入第一个值时,它能自动匹配,选择完后,输入分隔符,在输入内容时,它又可以自动匹配。
准备数据源,数据源里的数据将与输入内容进行匹配,匹配的就显示在下拉列表里
设置适配器,这一步与ListView等控件一样,我们需要适配器将数据域与界面连接起来
设置分隔符,可以自己创建分隔符Tokenizer,也可以使用内部的默认以英文逗号为分隔符的Tokenizer
下面是实例:
1.创建工程(也可以在上一个工程的基础上修改)
2.修改 activity_main 文件:
3.修改MainActivity:
其中与AutoCompleteTextView有所区别也只有设置分隔符这一步;
4.运行结果:
在输入了三条内容后,在输入逗号分隔符后,又可以开始自动匹配。
注:如果要使用自己自定义的分隔符,需要写一个类继承Tokenizer接口,然后实现里面的方法。这里可以先查看MultiAutoCompleteTextView.CommaTokenizer()的源码,然后再自己实现。附录一下源码:
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
功能
可支持用分隔符分开来选择多个值,比如在发送邮件时的选择联系人、个性化设置里选择个人标签等。在输入第一个值时,它能自动匹配,选择完后,输入分隔符,在输入内容时,它又可以自动匹配。
实现步骤
实例化控件,即通过findViewById找到控件准备数据源,数据源里的数据将与输入内容进行匹配,匹配的就显示在下拉列表里
设置适配器,这一步与ListView等控件一样,我们需要适配器将数据域与界面连接起来
设置分隔符,可以自己创建分隔符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 + ", "; } } } }
相关文章推荐
- android中Activity.startManagingCursor(cursor)方法详解
- Android Activity 知识点全面总结
- Android工程各个文件夹的功能区别
- android内存优化
- 使用Android Studio 1.3 版本进行NDK开发准备工作
- android 自定义控件中获取属性的三种方式(转)
- Android应用程序(APK)的构建过程
- Android生命周期函数执行顺序
- android 自定义组件-带图片的textView
- Android手势密码LockPatternView、LockPasswordUtils、LockPatternUtils等分析
- NavigationView+Toolbar
- Android之SurfaceView
- android4.02在x4412平台编译碰到的问题
- AndroidStudio更换黑色主题方法
- Android Handler的使用(3)
- android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)
- android学习笔记(8)linearlayout与android:layout_weight学习
- Android中自定义属性(attrs.xml,TypedArray的使用)
- Android 的消息机制
- 使用SpannableString设置部分文字大小、颜色、超链接、点击事件