您的位置:首页 > 移动开发 > Android开发

Android控件之AutoCompleteTextView

2016-11-24 17:57 363 查看
AutoCompleteTextView是一个自动补全的文本框,下面跟着一个包含过滤信息的列表项,单击该列表项时,文本框显示选中项。继承自EditText.内部包含一个AdapterView对象,可以通过该控件的setAdapter方法为AdapterView提供过滤数据。setAdapter方法中接受的数据必须实现Filterable接口。

主要方法:

setThreshold(int num)-num为输入几个字符后开始提示

setCompletionHint(CharSequence hint)-hint为列表项下边的提示文本

我们用一个程序来说明下该控件的用法:

下图是运行结果



activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<AutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/actv"/>
</LinearLayout>


MainActivity .java

public class MainActivity extends AppCompatActivity {
private AutoCompleteTextView actv;
private ArrayAdapter<String> adapter;
private void setupView(){
//实例化该控件
actv= (AutoCompleteTextView) findViewById(R.id.actv);
//此处为了演示该控件的用法,实际开发该词库应该是从数据库中取的。
String[] str={"google chrome","go","google","google android","b","back"};
actv.setThreshold(1);//输入一个字符就开始匹配
actv.setCompletionHint("历史信息...");
//实例化适配器
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str);
//为该控件设置适配器
actv.setAdapter(adapter);

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


上面的控件只能完成一次提示,而我们可能常常需要多次以分隔符分隔的提示信息。如下图:



这时我们需要使用AutoCompleteTextView 的一个子类MultiAutoCompleteTextView,与其父类最重要的区别在于MultiAutoCompleteTextView控件允许用户进行多次输入补全。该控件使用时必须设置分词符。该类内部包含了一个默认的逗号分词符。

主要方法:

setTokenizer(Tokenizer t)-该方法用来设置分词符,Tokenizer 是一个接口,我们要自定义分词符的话,必须实现这个接口。MultiAutoCompleteTextView包含了一个Tokenizer 接口的实现类CommaTokenizer,是使用逗号作为分词符的。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<MultiAutoCompleteTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/mactv"/>
</LinearLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {
private MultiAutoCompleteTextView tv;
private ArrayAdapter<String> adapter;
private void setupView(){
tv= (MultiAutoCompleteTextView) findViewById(R.id.mactv);
String[] str={"google chrome","go","google","google android","b","back"};
tv.setThreshold(1);//输入一个字符就开始匹配
tv.setCompletionHint("历史信息...");
//使用默认分词符
tv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,str);
tv.setAdapter(adapter);

}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setupView();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 控件