四、(Multi)AutoCompleteTextView自动完成文本框

1、AutoCompleteTextView继承EditView,实际上是一个文本编辑框,但是当用户输入一定字符后,会根据用户设定的一组字符串显示一个下拉菜单,供用户选择,当用户选择某个菜单项之后,会自动填写该文本框。

2、常用XML属性和方法如下:
completionHint/setCompletionHint(CharSequence):设置显示在下拉菜单中的提示内容
completionThreshold/setThreshold(int):设置用户至少输入几个字符才出现提示
dropDownHeight/setDropDownHeight(int):设置下拉菜单高度
dropDownHorizontalOffset:设置下拉菜单与文本框的水平距离,默认对齐
dropDownVerticalOffset:设置下拉菜单与文本框的垂直距离,默认紧跟文本框
dropDownWidth/setDropDownWidth(int):下拉菜单宽度
singleLine:单行显示
popupBackground/setDropDownBackgroundResource(int):下拉菜单背景
使用AutoCompleteTextView需要设置一个Adapter,封装了供选择的文本内容(关于Adapter后面会单独讲解)
MultiAutoCompleteTextView和AutoCompleteTextView相似,只是选择完一项之后可以继续选择,效果如下图4-2-1所示(第一行为AutoCompleteTextView,第二行为MultiAutoCompleteTextView):

《四、(Multi)AutoCompleteTextView自动完成文本框》 图 4-2-1

本示例java代码如下:

package com.example.autocompletetextview;

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

public class MainActivity extends Activity
{
    AutoCompleteTextView actv;
    MultiAutoCompleteTextView mauto;
    // 定义字符串数组,作为提示的文本
    String[] books = new String[]{"abc","abcd","abcde"};

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // 创建一个ArrayAdapter,封装数组
        ArrayAdapter<String> aa = new ArrayAdapter<String>(this,
                android.R.layout.simple_dropdown_item_1line, books);
        
        // 使用xml数据源代替String数组
        /*
         * ArrayAdapter aa = ArrayAdapter.createFromResource(this, R.array.strList, android.R.layout.simple_dropdown_item_1line);  
         * aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);  
        */
        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());
    }
}

布局xml文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- 定义一个自动完成文本框,指定输入一个字符后进行提示 -->
    <AutoCompleteTextView
        android:id="@+id/auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:dropDownHorizontalOffset="10dp"
        android:completionThreshold="1"/>
    <!-- 定义一个MultiAutoCompleteTextView组件 -->
    <MultiAutoCompleteTextView
        android:id="@+id/mauto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="1"/>
</LinearLayout>

3、使用XML为数据源代替java代码中的字符串数组
在string.xml中添加如下string-array:

    <string-array name="strList">
        <item>abc</item>
        <item>abcd</item>
        <item>abcde</item>
    </string-array>

显示效果和使用String数组作为数据源一样,实现代码见java代码中注释部分

    原文作者:zzjieee
    原文地址: https://www.jianshu.com/p/16d08ce9c092
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞