自动完成文本框(AutoCompleteTextView)从EditText派生而出,实际上也是一个文本编辑框,比文本编辑框多了一个功能:当用户输入一个(指定个数)字符之后,自动完成文本框会显示一个下拉菜单,供用户选择,当用户选择某个菜单项之后AutoCompleteTextView按用户选择的自动填写到文本框
使用AutoCompleteTextView很简单,只要设置一个adapter,该adapter封装了预设提示的文本这里要传递的adapter参数必须是继承ListAdapter和Filterable的,其中arrayAdapter和simpleAdapter都能满足要求,我们常用arrayAdapter,因为他不需要像simpleAdapte那样设置他的显示位置和textview组件
下边代码使用了对历史搜索记录进行sp简单储存,怎家输入框监听,每输入一个字符进行检索
布局xml
自动完成文本框
<AutoCompleteTextView
android:layout_width=""
android:layout_height=""
android:completionHint=""菜单中提示标题
android:completionThreshold=""用户至少输入几个字符才会显示
android:dropDownHeight=""下拉菜单高度
/>
public class MainActivity extends Activity implements View.OnClickListener {
AutoCompleteTextView autoTv;
private Button search;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autoTv = (AutoCompleteTextView) findViewById(R.id.autoTv);
initAutoComplete("history",autoTv);
search = (Button) findViewById(R.id.button1);
search.setOnClickListener(this);
/**
* 输入监听,当改变执行
*/
autoTv.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
initAutoComplete("history",autoTv);
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
/**
* 初始化AutoCompleteTextView,最多显示5项提示,使
* AutoCompleteTextView在一开始获得焦点时自动提示
* @param field 保存在sharedPreference中的字段名
* @param auto 要操作的AutoCompleteTextView
*/
private void initAutoComplete(String field,AutoCompleteTextView auto) {
SharedPreferences sp = getSharedPreferences("network_url", 0);
String longhistory = sp.getString("history", "");
String[] hisArrays = longhistory.split(",");
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, hisArrays);
//只保留最近的50条的记录
if(hisArrays.length > 50){
String[] newArrays = new String[50];
System.arraycopy(hisArrays, 0, newArrays, 0, 50);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, newArrays);
}
auto.setAdapter(adapter);
//xml中已配置
//提示列表高度
// auto.setDropDownHeight(350);
// //用户至少输入几个字符才会显示
// auto.setThreshold(1);
// auto.setCompletionHint("提示语");
}
@Override
public void onClick(View v) {
// 这里可以设定:当搜索成功时,才执行保存操作
saveHistory("history",autoTv);
}
/**
* 把指定AutoCompleteTextView中内容保存到sharedPreference中指定的字符段
* @param field 保存在sharedPreference中的字段名
* @param auto 要操作的AutoCompleteTextView
*/
private void saveHistory(String field,AutoCompleteTextView auto) {
String text = auto.getText().toString();
SharedPreferences sp = getSharedPreferences("network_url", 0);
String longhistory = sp.getString(field, "");
if (!longhistory.contains(text + ",")) {
StringBuilder sb = new StringBuilder(longhistory);
sb.insert(0, text + ",");
sp.edit().putString("history", sb.toString()).commit();
}
}
}
1.clearListSelection,去除selector样式,只是暂时的去除,当用户再输入时又重新出现
2.dismissDropDown,关闭下拉提示框
3.enoughToFilter,这是一个是否满足过滤条件的方法,sdk建议我们可以重写这个方法
4. getAdapter,得到一个可过滤的列表适配器
5.getDropDownAnchor,得到下拉框的锚计的view的id
6.getDropDownBackground,得到下拉框的背景色
7.setDropDownBackgroundDrawable,设置下拉框的背景色
8.setDropDownBackgroundResource,设置下拉框的背景资源
9.setDropDownVerticalOffset,设置下拉表垂直偏移量,即是list里包含的数据项数目
10.getDropDownVerticalOffset ,得到下拉表垂直偏移量
11..setDropDownHorizontalOffset,设置水平偏移量
12.setDropDownAnimationStyle,设置下拉框的弹出动画
13.getThreshold,得到过滤字符个数
14.setOnItemClickListener,设置下拉框点击事件
15.getListSelection,得到下拉框选中为位置
16.getOnItemClickListener。得到单项点击事件
17.getOnItemSelectedListener得到单项选中事件
18.getAdapter,得到那个设置的适配器