Android实现自动补全

安卓应用程序中实现文本框自动补全是一个很常见的功能,今天我就给大家讲一下如何去实现一个简单的自动补全功能:

自动补全效果图:

代码非常的简单,在这里我就不多说了,直接将代码展示给大家:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.testandroid_0610.MainActivity">

    <!--completionThreshold属性:设置从第几个字符出现提示,这里我们设置第一个-->
    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/actv_main_auto"
        android:completionThreshold="1"
        />

</android.support.constraint.ConstraintLayout>

数据源文件(数据源我们直接在res—>values—>strings.xml中设置数据,便于操作):

<resources>
    <string name="app_name">TestAndroid_0610</string>
    <!--添加字符串-->
    <string-array name="data">
        <item>秋衣</item>
        <item>秋裤</item>
        <item>加大</item>
        <item>加肥</item>
    </string-array>
</resources>


java代码:

package com.example.testandroid_0610;

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 actv_main_auto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //获取控件
        actv_main_auto = (AutoCompleteTextView) findViewById(R.id.actv_main_auto);
        //获取字符串数组
        String data[]=getResources().getStringArray(R.array.data);
        //适配器
        ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
        //给控件设置适配器
        actv_main_auto.setAdapter(adapter);
    }
}


便可以实现上述效果。

但有时我们需要输入几个关键字,在关键字的中间会用空格或者逗号隔开,这时上述代码便不能满足要求了,我们需要加强一下:

加强后效果图:

添加的代码也不多

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="com.example.testandroid_0610.MainActivity">

    <!--completionThreshold属性:设置从第几个字符出现提示,这里我们设置第一个-->
    <AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/actv_main_auto"
        android:completionThreshold="1"
        />
    <MultiAutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/mactv_main_auto"
        android:completionThreshold="1"
        />

</android.support.constraint.ConstraintLayout>


java代码:

package com.example.testandroid_0610;

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

public class MainActivity extends AppCompatActivity {

    private AutoCompleteTextView actv_main_auto;
    private MultiAutoCompleteTextView mactv_main_auto;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取控件
        actv_main_auto = (AutoCompleteTextView) findViewById(R.id.actv_main_auto);
        //获取新的控件
        mactv_main_auto = (MultiAutoCompleteTextView) findViewById(R.id.mactv_main_auto);
        //获取字符串数组
        String data[]=getResources().getStringArray(R.array.data);
        //适配器
        ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1,data);
        //给控件设置适配器
        actv_main_auto.setAdapter(adapter);
        //给控件设置分隔符
        MultiAutoCompleteTextView.Tokenizer tokenizer=new MultiAutoCompleteTextView.CommaTokenizer();
        mactv_main_auto.setTokenizer(tokenizer);
        mactv_main_auto.setAdapter(adapter);
    }
}


在原有的布局文件中加入新添加的代码,便可实现加强后的效果

发布了52 篇原创文章 · 获赞 47 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/zhangkaidsy/article/details/72983464