Android控件——AutoCompleteTextView动态自动匹配输入内容

来源:互联网 发布:陈奕迅 必听 知乎 编辑:程序博客网 时间:2024/05/22 15:59

什么是动态自动匹配输入内容呢?举个例子,当我们在百度等搜索引擎的输入框中输入想要搜索的关键词,输入框下面会提示很多相关联的热门搜索项,效果图如下:这里写图片描述

那在安卓中如何实现这种效果呢?在这里给大家推荐两个Android的控件:

  • AutoCompleteTextView
  • MultiAutoCompleteTextView

一、AutoCompleteTextView

  • 独特属性:android:completionThreshold=”2”—–设置输入多少字符时自动匹配

首先,我们先在res文件夹(我用的是AndroidStudio)下的active_main.xml下面加入AutoCompleteTextView控件,并设置好大小宽高等其他一些基础属性

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.admin.demo.MainActivity">    <AutoCompleteTextView        android:completionThreshold="2"         android:id="@+id/autoCompleteTextView1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入你要搜索的关键词"         /></LinearLayout>

接着,我们到java目录下的MainActivity.java加入相应的代码:

package com.example.admin.demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.AutoCompleteTextView;public class MainActivity extends AppCompatActivity {    private AutoCompleteTextView acTextView;     //建立一个数组,保存我们想要提示的文本内容    private String[] res = {"ab1","ab2","ab3"};     @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件,返回类型view强制转换成AutoCompleteTextView        acTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1);         //添加适配器,并初始化数据源,用来匹配文本框输入的内容        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res);       //将适配器与当前控件绑定       acTextView.setAdapter(adapter);    }}

这样代码就完成了,因为我们在AutoCompleteTextView控件中设置了android:completionThreshold=”2”,即当我们输入到第2个字符时开始进行匹配,让我们将当前应用程序布置到模拟器里面看一下效果:

这里写图片描述


二、MultiAutoCompleteTextView
有时候我们在文本框中需要进行多次输入,比如我们在发短信或者写邮件的时候,往往需要多选联系人:
这里写图片描述
在这种时候,我们就可以选择MultiAutoCompleteTextView:

  • 支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配
  • 独特属性:android:completionThreshold=”2”—–设置输入多少字符时自动匹配
  • 设置分隔符:macTextView.setTokenizer(newMultiAutoCompleteTextView.CommaTokenizer());

这个控件的使用方法跟AutoCompleteTextView大体上还是差不多的,只是多了设置分隔符这一步


activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.admin.demo.MainActivity">    <MultiAutoCompleteTextView        android:completionThreshold="2"        android:id="@+id/multiAutoCompleteTextView"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入收件人" /></LinearLayout>

MainActivity.java:

package com.example.admin.demo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.MultiAutoCompleteTextView;public class MainActivity extends AppCompatActivity {    private MultiAutoCompleteTextView macTextView;    //建立一个数组,保存我们想要提示的文本内容    private String[] res = {"ab1","ab2","ab3","cd1","cd2","cd3"};    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //初始化控件,返回类型view强制转换成AutoCompleteTextView        macTextView = (MultiAutoCompleteTextView) findViewById(R.id.multiAutoCompleteTextView);        //添加适配器,并初始化数据源,用来匹配文本框输入的内容        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,res);        //将适配器与当前控件绑定        macTextView.setAdapter(adapter);        //设置以逗号为分隔符为结束的符号        macTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());    }}

运行结果:
这里写图片描述

阅读全文
1 0
原创粉丝点击