Adapter类Two之Autocompletion自动完成文本框

Autocompletion(自动完成文本框)

继承与EditText,比编辑框多了一个功能:

用户输入一定字符后,显示一个下拉菜单,提供给用户从中选择,选择的某个选项,会自动填写该文本框

其实可以看成搜索框吧

接着我们实现一个简单的搜索框布局案例吧:

实例代码:

main.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
tools:context=".MainActivity" >

<AutoCompleteTextView
android:id="@+id/autoText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:completionHint="请输入搜索内容"
android:completionThreshold="2"
android:layout_weight="7"
android:dropDownHorizontalOffset="10dp"
/>

<Button
android:id="@+id/btnsearch"
android:layout_width="80dp"
android:layout_height="64dp"
android:layout_marginLeft="5px"
android:background="@drawable/button_selector" />

</LinearLayout>

代码解释:

这里我们定义了一个自动完成文本框:AutoCompleteTextView和一个按钮

completionHint:设置下拉菜单中的提示标题

complerionThreshold:指定用户至少输入多少个字符才会显示提示,这里的话我们指定了2个

dropDownHorizontalOffset:指定下拉菜单与文本之间的水平间距,这里的话我们设置为10dp;

dropDownVerticalOffset:同上,不过这个是竖直方向的偏移

dropDownHeight/Width:分别是指定下拉菜单的高度与宽度

popupBackground:为下拉菜单提供一个背景

MainActivity.java部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.jay.demo;  

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

public class MainActivity extends Activity {
private static final String[] data = new String[]
{
"呵呵","呵呵呵","呵呵呵呵呵呵","呵呵呵呵呵",
"呵呵呵呵呵呵","嘻嘻"
};
private AutoCompleteTextView searchtext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

searchtext = (AutoCompleteTextView) findViewById(R.id.autoText);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_dropdown_item_1line,data);
searchtext.setAdapter(adapter);
}
}

运行截图:

代码解释:

首先findViewById()找到自动完成文本框,接着用ArrayAdapter创建一个存储字符串数组的adapter

ArrayAdapter构造方法中的参数依次为:上下文,android的一个默认的下拉条目样式,最后是字符串数组

接着setAdapter即可!!

触发事件的话比较简单,这里的话就略过了….

MultiAutoCompleteTextView组件:

多提示项的自动完成文本框

截图:

代码实现:

只需要修改一下AutoCompleteTextView的标签和一些参数即可:

main.xml:

1
2
3
4
5
6
7
8
9
<MultiAutoCompleteTextView  
android:id="@+id/autoText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:completionThreshold="1"
android:layout_weight="7"
android:dropDownHorizontalOffset="10dp"
/>

MainActivity.java

1
2
3
4
5
private MultiAutoCompleteTextView searchtext;  
searchtext = (MultiAutoCompleteTextView) findViewById(R.id.autoText);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_dropdown_item_1line,data);
searchtext.setAdapter(adapter);
searchtext.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());

代码分析:

为其设置适配器以后,setTokenizer是为其设置分隔符

其实这两个都差不多的,了解有个印象即可。