AutoCompleteTextView 自动完成 自动邮件检测

简介

在Android中提供了两种智能输入框,它们是AutoCompleteTextView、MultiAutoCompleteTextView。它们的功能大致一样,AutoCompleteTextView是从第一个字符就开始联想,而MultiAutoCompleteTextView则可以从指定字符开始联想。

MultiAutoCompleteTextView能够对用户键入的文本进行有效地扩充提示,而不需要用户输入整个内容。(用户输入一部分内容,剩下的部分系统就会给予提示)。使用时,必须提供一个MultiAutoCompleteTextView.Tokenizer用来区分不同的子串。

布局文件中常用属性
  • android:completionHint 设置出现在下拉菜单中的提示标题
  • android:completionThreshold 设置用户至少输入多少个字符才会显示提示
  • android:dropDownHorizontalOffset 下拉菜单于文本框之间的水平偏移。默认与文本框左对齐
  • android:dropDownHeight 下拉菜单的高度
  • android:dropDownWidth 下拉菜单的宽度
  • android:dropDownVerticalOffset 垂直偏移量

代码-Activity


   

public class MainActivity extends Activity {

    private AutoCompleteTextView auto_name;

    private AutoCompleteTextView auto_mail;

    private MultiAutoCompleteTextView multi_auto_name;

    private MultiAutoCompleteTextView multi_auto_mail;

    private MultiAutoCompleteTextView multi_auto_mail2;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        auto_name = (AutoCompleteTextView) findViewById(R.id.auto_name);

        auto_mail = (AutoCompleteTextView) findViewById(R.id.auto_mail);

        multi_auto_name = (MultiAutoCompleteTextView) findViewById(R.id.multi_auto_name);

        multi_auto_mail = (MultiAutoCompleteTextView) findViewById(R.id.multi_auto_mail);

        multi_auto_mail2 = (MultiAutoCompleteTextView) findViewById(R.id.multi_auto_mail2);

        //提示框列表的适配器         String[] string_names = getResources().getStringArray(R.array.strings);         String[] mail_paths = new String[] { "@163.com", "@qq.com", "@sina.com", "@hotmail.com", "@gmail.com" };         ArrayAdapter<String> adapterName = new ArrayAdapter<String>(this, R.layout.item_auto_textview, string_names);         ArrayAdapter<String> adapterMail = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, mail_paths);
        auto_mail.setAdapter(adapterName);         auto_name.setAdapter(adapterMail);         auto_name.setThreshold(1);//设置输入多少字符后提示,默认值为2个,也可通过android:completionThreshold设置
        //对于MultiAutoCompleteTextView,用户必须通过setTokenizer设置一个Tokenizer用来区分不同的子串         multi_auto_name.setTokenizer(new CommaTokenizer());         multi_auto_name.setAdapter(adapterName);
        multi_auto_mail.setTokenizer(new CommaTokenizer());         multi_auto_mail.setAdapter(adapterMail);         multi_auto_mail2.setTokenizer(new MailBoxAssociateTokenizer());         multi_auto_mail2.setAdapter(adapterMail);     } }

代码-自定义View


/**

 * 自定义的MultiAutoCompleteTextView,实现只要输入到@符,就会开始联想邮箱

 */

public class MailBoxAssociateView extends MultiAutoCompleteTextView {

    public MailBoxAssociateView(Context context) {

        super(context);

    }

    public MailBoxAssociateView(Context context, AttributeSet attrs) {

        super(context, attrs);

    }

    public MailBoxAssociateView(Context context, AttributeSet attrs, int defStyle) {

        super(context, attrs, defStyle);

    }

    @Override

    public boolean enoughToFilter() {

        // 如果字符中包含‘@‘并且不在第一位,则满足条件  

        return getText().toString().contains("@") && getText().toString().indexOf("@") > 0;

    }

}

代码-自定义分析器


/**

 * 自定义的MultiAutoCompleteTextView的分析器,指定从哪个字符开始联想

 */

public class MailBoxAssociateTokenizer implements Tokenizer {

    @Override

    public int findTokenEnd(CharSequence text, int cursor) {

        int i = cursor;

        int len = text.length();

        while (i < len) {

            if (text.charAt(i) == ‘@‘) {

                return i;

            } else {

                i++;

            }

        }

        return len;

    }

    @Override

    public int findTokenStart(CharSequence text, int cursor) {

        int index = text.toString().indexOf("@");

        if (index < 0) {

            index = text.length();

        }

        if (index >= findTokenEnd(text, cursor)) {

            index = 0;

        }

        return index;

    }

    @Override

    public CharSequence terminateToken(CharSequence text) {

        int i = text.length();

        while (i > 0 && text.charAt(i - 1) == ‘ ‘) {

            i--;

        }

        if (i > 0 && text.charAt(i - 1) == ‘@‘) {

            return text;

        } else {

            if (text instanceof Spanned) {

                SpannableString sp = new SpannableString(text);

                TextUtils.copySpansFrom((Spanned) text, 0, text.length(), Object.class, sp, 0);

                return sp;

            } else {

                return text;

            }

        }

    }

}

布局


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <AutoCompleteTextView

        android:id="@+id/auto_name"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="AutoCompleteTextView,老白"

        android:textColor="#f00"

        android:textSize="16sp" />

    <AutoCompleteTextView

        android:id="@+id/auto_mail"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="AutoCompleteTextView,邮箱"

        android:textSize="16sp" />

    <MultiAutoCompleteTextView

        android:id="@+id/multi_auto_name"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="MultiAutoCompleteTextView,老白"

        android:textSize="16sp" />

    <MultiAutoCompleteTextView

        android:id="@+id/multi_auto_mail"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:completionThreshold="1"

        android:hint="MultiAutoCompleteTextView,邮箱"

        android:textSize="16sp" />

    <com.bqt.autotv.MailBoxAssociateView

        android:id="@+id/multi_auto_mail2"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:hint="自定义的MailBoxAssociateView,非常好用"

        android:textSize="16sp" />

</LinearLayout>

来自为知笔记(Wiz)

附件列表

时间: 2024-07-29 00:03:37

AutoCompleteTextView 自动完成 自动邮件检测的相关文章

PCB 后台自动系统集成与邮件推送实现

在PCB行业中,工程系统是主要数据生产者,而这些数据不仅仅给自己系统使用呀,我们需要将数据传递到各系统,才达到各系统共同协作的目的. 这里以问答方式对实现方式进行讲解.呵呵呵! 后台自动集成问题解答: 一.工程系统中数据是主动推送还是被动拉取? 工程系统中的数据通常采用是主动推送到各系统中去的(MES,OMS,APS,ADD,ERP,集成平台) 二.工程系统与多少个系统集成,集成关系图是怎么的呢? 目前工程与6个系统有集成关系,集成关系图如下所示. 三.怎么实现后台自动集成的? 当工程MI流程指

扩展一个字符自动长度自动检测的函数

/** * 扩展一个字符自动长度自动检测的函数 * @param {[type]} max [description] * @param {Function} callback [description] * @return {[type]} [description] */ jQuery.fn.maxLength = function(max, callback) { this.each(function(){ var type = this.tagName.toLowerCase(); va

zabbix自动注册及邮件报警

自动注册 自动注册,基于注册规则,匹配主机名,必须是客户端安装好agent,如果需要添加监控,需创建Actions动作 (1)打开Zabbix服务端,选择"配置"-"动作",事件源选择"自动注册",创建新的动作 (2)在"动作"配置项,添加新的触发条件为"主机名称非似 Linux":在"操作"配置项,创建新的操作:添加主机.添加到主机群组:Linux servers.链接到模板:Temp

Python+selenium自动循环发邮件

Python源代码如下: # coding=utf-8 from selenium import webdriver from time import sleep from random import randint def auto_throw(target_qq, username, password): """自动循环发邮件""" driver = webdriver.Chrome() driver.get("https://ma

基于卷积神经网络(CNN)的中文垃圾邮件检测

前言 跳过废话,直接看正文 文本分类任务是一个经久不衰的课题,其应用包括垃圾邮件检测.情感分析等. 传统机器学习的做法是先进行特征工程,构建出特征向量后,再将特征向量输入各种分类模型(贝叶斯.SVM.神经网络等)进行分类. 随着深度学习的发展以及RNN.CNN的陆续出现,特征向量的构建将会由网络自动完成,因此我们只要将文本的向量表示输入到网络中就能够完成自动完成特征的构建与分类过程. 就分类任务而言,CNN比RNN更为合适.CNN目前在图像处理方向应用最为广泛,在文本处理上也有一些的应用.本文将

【C/C++学院】0814-引用高级、引用高级增加/auto自动变量自动根据类型创建数据/Bool/Enum/newdelete全局/大数据乘法与结构体/函数模板与auto/宽字符本地化/inline

引用高级.引用高级增加 #include<iostream> #include<stdlib.h> // int a[10] // int (&ra)[10] // int a[2][5] // int (&ra)[2][5] void main1() { int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int(&ra)[10](a);//引用就是给原来的变量有一个别名同一个地址 int i = 0; for (

基本数据类型对象包装类和自动装箱自动拆箱技术

一.基本数据类型对象包装类 byte Byte short Short int  Integer long Long boolean Boolean flaot Float double Double char Character 二.基本数据类型对象包装类的最常见作用 就是用于基本数据类型和字符串类型之间做转换 三.基本数据类型转成字符串:   基本数据类型+"": 基本数据类型.toString(基本数据类型值)   如:Integer.toString(34);将34整数转成字符

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

QQ空间自动评论自动转发 微博自动自动转发神器带源码(超简单) 升级版

//QQ空间自动评论自动转发 Dim iy Rem head iy = 0 Rem nextfind FindPic 0,iy,1366,768,"Attachment:\qqzf.bmp",0.9,intX,intY If intX > 0 And intY > 0 Then //MessageBox "aa" MoveTo intX , intY Delay 500 LeftClick 1 MoveTo 0,0 Delay 2000 SayStrin

自动控制系统|自动控制系统及全面应用|自动控制系统的组成|自动控制系统公司推荐

自动控制系统|自动控制系统及全面应用|自动控制系统的组成|自动控制系统公司推荐 自动控制系统 装车系统 装车控制仪 SCADA系统 TAS系统 装车控制系统 定量装车控制系统 SIS系统 流量计 鹤管流体装卸臂什么叫自动控制系统? 自动控制系统(automatic control systems)是在无人直接参与下可使生产过程或其他过程按期望规律或预定程序进行的控制系统.自动控制系统是实现自动化的主要手段.简称自控系统.自动控制系统及全面应用 自动控制系统已被广泛应用于人类社会的各个领域. 在工