安卓应用程序中实现文本框自动补全是一个很常见的功能,今天我就给大家讲一下如何去实现一个简单的自动补全功能:
自动补全效果图:
代码非常的简单,在这里我就不多说了,直接将代码展示给大家:
布局文件:
<?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);
}
}
在原有的布局文件中加入新添加的代码,便可实现加强后的效果