虽然不难,但是容易忘记,做个备忘吧

package com.guet.zhuge;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.AutoCompleteTextView; public class MainActivity extends Activity implements TextWatcher{ private AutoCompleteTextView autoview;
private AutoTextViewAdapter adapter; private static final String[] AUTO_EMAILS = {"@163.com", "@sina.com", "@qq.com", "@126.com", "@gmail.com", "@apple.com"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autoview = (AutoCompleteTextView) findViewById(R.id.auto_tv);
adapter = new AutoTextViewAdapter(this);
autoview.setAdapter(adapter);
autoview.setThreshold(1);//输入1个字符时就开始检测,默认为2个
autoview.addTextChangedListener(this);//监听autoview的变化
} @Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
String input = s.toString();
adapter.mList.clear();
autoAddEmails(input);
adapter.notifyDataSetChanged();
autoview.showDropDown();
} /**
* 自动填充邮箱列表
* @param input
*/
private void autoAddEmails(String input) {
System.out.println("input-->" + input);
String autoEmail = "";
if (input.length() > 0) {
for (int i = 0; i < AUTO_EMAILS.length; ++i) {
if(input.contains("@")) {//包含“@”则开始过滤
String filter = input.substring(input.indexOf("@") + 1 , input.length());//获取过滤器,即根据输入“@”之后的内容过滤出符合条件的邮箱
System.out.println("filter-->" + filter);
if(AUTO_EMAILS[i].contains(filter)) {//符合过滤条件
autoEmail = input.substring(0, input.indexOf("@")) + AUTO_EMAILS[i];//用户输入“@”之前的内容加上自动填充的内容即为最后的结果
adapter.mList.add(autoEmail);
}
}else {
autoEmail = input + AUTO_EMAILS[i];
adapter.mList.add(autoEmail);
}
}
}
} @Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub } @Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub }
}

适配器代码如下:

package com.guet.zhuge;

import java.util.ArrayList;
import java.util.List; import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView; public class AutoTextViewAdapter extends BaseAdapter implements Filterable { public List<String> mList;
private Context mContext;
private MyFilter mFilter; public AutoTextViewAdapter(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;
} 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();
}
} }
}

主要的xml 部分文件:

 <AutoCompleteTextView
android:id="@+id/set_manageaccount_reemail_act_emialaddress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginRight="10dp"
android:background="@drawable/edt_bg"
android:singleLine="true"
android:ems="10"
android:hint="请输入邮箱地址" > <requestFocus />
</AutoCompleteTextView>

继续学习!

android小知识之邮箱地址输入自动完成的更多相关文章

  1. android小知识之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)

    1.设置EditText的值监听事件 . <span style="font-size:14px;color:#990000;"> EditText ed=new Ed ...

  2. Android 小知识

    1.判断sd卡是否存在 boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environmen ...

  3. android小知识之圆角ListView

    有些东西看多了,就厌烦了:extjs对我这种感觉最为强烈.甚至,有时觉得设计之殇是审美疲劳.直角看多了,就想看看圆角,不知何时,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,iphone中 ...

  4. android小知识之SparseArray(HaspMap替换)

    最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能.那我们就来看看源码中SparseAr ...

  5. android小知识之意图(intent)

    android中的意图有显示意图和隐式意图两种, 显示意图要求必须知道被激活组件的包和class 隐式意图只需要知道跳转activity的动作和数据,就可以激活对应的组件 A 主activity  B ...

  6. android小知识之自定义通知(toast)

    Toast是较为熟悉的通知,但默认方式比较单调,可以根据自己的需求自定义,在统一UI风格的时候可以单独拿出来做一个工具类来使用. 下面我在Fragment中定义的一个按键弹出自定义Toast,在Act ...

  7. android小知识之中如何获取当前时间

    百度整理过来的 [java] view plaincopyprint? import    java.text.SimpleDateFormat; SimpleDateFormat    format ...

  8. Android小知识汇总

    1.Android Studio 将module编译打包成aar文件,module依赖的 (例如 compile 'com.zhy:autolayout:1.4.3' )不会被打包进入aar文件,应用 ...

  9. kubernetes系列(小知识):kubectl命令自动补全

    kubectl命令自动补全 linux系统 yum install -y bash-completion source /usr/share/bash-completion/completions/d ...

随机推荐

  1. su 切换用户

    大部分Linux发行版的默认账户是普通账户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su或su - 前者只是切换ro ...

  2. oracle ORA-00913: 值过多

    --oracle中查看表是否被锁 查看表是否被锁   SELECT /*+ rule*/   a.sid, b.owner, object_name, object_type   FROM v$loc ...

  3. java中int和Integer的区别

    Integer与int的种种比较你知道多少?  转载自http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html 如果面试 ...

  4. [整理]DLL延时加载 && 设置进程私有环境变量

    DLL延时加载鉴于静态和动态加载之间,即无需在代码中显示加载但它内队依然是动态加载的方式只是系统帮处理了.这样做好处是: 1. 可以加快启动时间(因为它是动态加载在需要的时间加载), 2. 减小编写L ...

  5. 关于FIND_IN_SET 和distinct 的坑爹的一天

    FIND_IN_SET的使用,前面介绍过,distinct是结果去重复的函数,两者结合使用,却花费了我一天的光阴. 1.先面试含有重复值正确的显示顺序select  lIdfrom tbCourse1 ...

  6. HTML DOM 属性记录

    将HTML DOM中几个容易常用的属性做下记录,需要的朋友可以参考下.     nodeName.nodeValue 以及 nodeType 包含有关于节点的信息. nodeName 属性含有某个节点 ...

  7. js-计算器

    <div class="main"><h1>HTML5-计算器</h1>            <input id="num1& ...

  8. CSS自学笔记(3):CSS选择器

    CSS中提供了非常丰富的选择器,但是由于浏览器的支持情况,很多选择器很少用到. 1.基础选择器 选择器 含义 示例 * 通用元素选择器,匹配任何元素 * { margin:0; padding:0; ...

  9. linux 关于动态库的知识

    问题起缘于编译一个程序时,使用glib2-2.28.8的动态库,而系统自带的是glib2-2.22.5 不想升级系统的glib2库,而使用程序自带库文件的方式加载(类似windows系统,优先加载当前 ...

  10. ElasticSearch Aggregation

    http://zaiste.net/2014/06/concisely_about_aggregations_in_elasticsearch/