Android自定义AutoCompleteTextView实现自动补全Email
本篇主要实现了你可以自行控制从第一个字符开始进行联想
public class AutoComplete extends AutoCompleteTextView { //输入字符进行联想,@163.com、@126.com、@qq.com、@sina.com、@yeah.net、@yahoo.com、@gmail.com等常用邮箱 private static final String[] emailSuffix = {"@qq.com", "@163.com", "@126.com", "@gmail.com", "@sina.com", "@hotmail.com", "@yahoo.cn", "@sohu.com", "@foxmail.com", "@139.com", "@yeah.net", "@vip.qq.com", "@vip.sina.com"}; public AutoComplete(Context context) { super(context); init(context); } public AutoComplete(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { final MyAdatper adapter = new MyAdatper(context); setAdapter(adapter); addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { String input = s.toString(); adapter.mList.clear(); if (input.length() > 0) { for (int i = 0; i < emailSuffix.length; ++i) { adapter.mList.add(input + emailSuffix[i]); } } adapter.notifyDataSetChanged(); showDropDown(); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }); // default=2 当输入一个字符的时候就开始检测 setThreshold(1); } class MyAdatper extends BaseAdapter implements Filterable { List<String> mList; private Context mContext; private MyFilter mFilter; public MyAdatper(Context context) { mContext = context; mList = new ArrayList<String>(); } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { TextView tv = new TextView(mContext); tv.setTextColor(Color.BLACK); tv.setTextSize(20); convertView = tv; } TextView txt = (TextView) convertView; txt.setText(mList.get(position)); return txt; } @Override public Filter getFilter() { if (mFilter == null) { mFilter = new MyFilter(); } return mFilter; } private class MyFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (mList == null) { mList = new ArrayList<String>(); } results.values = mList; results.count = mList.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } } }然后你需要和其他的布局文件一样,直接引入就好
<fashion.test.com.email.AutoComplete android:layout_width="match_parent" android:layout_height="wrap_content" />
下面是实现的效果,可以看到可以监听每一个字符