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

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. leetcode 3Sum Closest python

    class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List ...

  2. std::string 字符替换函数

    // 替换路径中所有“\”为“/” #include <algorithm> static std::string ConvertSlash(std::string& strUrl ...

  3. CSS3弹性盒模型布局模块

    原文:http://robertnyman.com/2010/12/02/css3-flexible-box-layout-module-aka-flex-box-introduction-and-d ...

  4. C#学习日志 day10 -------------- problem statement

    Revision History Date Issue Description Author 15/May/2015 1.0 Finish most of the designed function. ...

  5. Art of Unit Test (1) - Breaking Dependency

    #!/usr/bin/env python # encoding: utf-8 import unittest """ the simplyest way to test ...

  6. block 的调用 简单代码

    #import <Foundation/Foundation.h> #import "Button.h" typedef int (^MySum) (int, int) ...

  7. linux基础--chkconfig 详解

    chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...

  8. PKCS#12

    http://blog.csdn.net/cuiran/article/details/7816696 数字证书介绍 一.什么是数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供 ...

  9. Nand ECC校验和纠错原理及2.6.27内核ECC代码分析

    ECC的全称是Error Checking and Correction,是一种用于Nand的差错检测和修正算法.如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个 ...

  10. 读配置文件 properties

    /** * */package com.sprucetec.tms.fee.utils;import java.io.IOException;import java.util.ArrayList;im ...