在做android客户端应用程序时,总会遇到输入邮箱的功能,最近由于项目需要,要做本地的邮箱联想功能,思考下后,决定用MultiAutoCompleteTextView来实现这一功能。

android SDK中本身就提供了两个带联想功能的控件,另一个是AutoCompleteTextView,就我所知,AutoCompleteTextView是从第一个字符就开始联想,而MultiAutoCompleteTextView则可以指定字符开始联想,正是由于MultiAutoCompleteTextView具有这一个功能,我们才考虑继承自MultiAutoCompleteTextView实现我们自定义的邮箱联想控件。

先看下效果图:

只要输入到@符,就会开始联想邮箱,样式可以自己定义。

下面看下主要的代码:

//这个就是我们继承自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);}@Overridepublic boolean enoughToFilter(){// 如果字符中包含'@'并且不在第一位,则满足条件return getText().toString().contains("@") && getText().toString().indexOf("@") > 0;}
}
//指定从哪个字符开始联想public class MailBoxAssociateTokenizer implements Tokenizer
{@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}}}}

布局文件

<com.micen.buyers.view.mailassociate.MailBoxAssociateViewandroid:id="@+id/imageviewedittextone"style="@style/medittext_style"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@id/logoimageview"android:layout_marginLeft="25dp"android:layout_marginRight="25dp"android:layout_marginTop="67dp"android:dropDownSelector="@drawable/mic_home_bottom_item_bg"android:hint="@string/email_address"android:paddingLeft="5dp"android:popupBackground="@drawable/bg_recommend_mail_list"android:singleLine="true"android:textColor="@color/light_black"android:textColorHint="@color/mic_home_search_text"android:textSize="16sp" />

思路:

主要是参考了android SDK本身的MultiAutoCompleteTextView的实现方式,整个工程我放到了我的资源中,有需要的可 下载,可直接放到项目中使用。

android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)相关推荐

  1. Android自定义导览地图组件(一)

    丨版权说明 : <Android自定义导览地图组件(一)>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢.          鉴于Android关于自定义导览地图的相关资料以及 ...

  2. android 自定义本地验证码demo,Android 自定义验证码输入框的实例代码(支持粘贴连续性)...

    需求 1.能自定义输入框个数和样式 2.支持长按粘贴或剪切板内容自动填充(粘贴连续性) 其中第2点是最为重要的,正是其他人没有这点,逼得自己弄一个 示例 别人的示例: 粘贴居然不支持连续性,只能粘贴第 ...

  3. Android自定义九宫格手势解锁组件

    项目来源 别的不说,先看一下效果图: 九宫格手势图案解锁功能在很多应用中都在使用,本文介绍的组件来自于开源项目PatternLocker的翻写,原工程是使用Kotlin开发的,由于我们项目是使用jav ...

  4. Android 自定义本地图片加载库,仿微信相册

    总结一下微信的本地图片加载有以下几个特点,也是提高用户体验的关键点 1.缩略图挨个加载,一个一个加载完毕,直到屏幕所有缩略图都加载完成 2.不等当前屏的所有缩略图加载完,迅速向下滑,滑动停止时立即加载 ...

  5. Android自定义电池电量显示组件(kotlin,java)

    最近产品研发需求需要显示在线设备的电池电量状态,然后UI给出的效果的图是这样的 于是就开始了自定义个,因为是项目特定的UI所以很多属性都没有直接抽取到styles里面了,直接上代码(因为项目是使用ko ...

  6. android 自定义view之雷达扫描,基于Android自定义控件实现雷达效果

    如何制作出类似雷达扫描的效果,具体方法如下 一.效果图 二.实现思路 1.自定义控件RadarView用来画雷达的效果图,可以自定义属性包括 backgroundColor:背景颜色 circleNu ...

  7. android弹窗不能手动关闭_vue3.0系列:Vue3自定义PC端弹窗组件V3Layer

    今天给大家分享的是Vue3系列之自定义桌面端对话框组件v3layer. V3Layer 基于vue3.0构建的多功能PC网页端弹窗组件.拥有超过10+种弹窗类型.30+种参数配置,支持拖拽(自定义拖拽 ...

  8. 基于Android的本地电子书阅读器的设计与实现Ebook(1)

    基于Android的本地电子书阅读器的设计与实现Ebook(1) 学习Android时间不久,试着做了一个本地电子书阅读器APP,因为知识浅薄并不能像其他大佬一样实现各种繁杂的功能,但可以实现基本的阅 ...

  9. android 自定义相册选择,Android通过手机拍照或从本地相册选取图片设置头像

    像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1.让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2.让用户启动手机的相机拍照,拍完照片后裁剪 ...

最新文章

  1. OpenCV java 线性滤波(16)
  2. WebX5 button tabs的bind-text属性设置
  3. js里的null 与undefined
  4. linux 系统、命令、软件
  5. uva 11995——I Can Guess the Data Structure!
  6. 交换机命令行配置与VLAN
  7. apollo local 模式_「架构」 - 配置中心 Apollo基本使用
  8. 311. Sparse Matrix Multiplication
  9. 确定要离开当前页面吗
  10. 十大网络安全策略 打造坚固的内网
  11. 2017 ACM-CCPC 秦皇岛站 总结
  12. Linux之进程管理——查看进程
  13. C# 实现屏幕键盘 (ScreenKeyboard)
  14. c语言我喜欢你,【幻 仿】UC启动时的我喜欢你
  15. 管理ELK进程工具: Supervisor Cesi
  16. 在线预览 Word、Excel、PowerPoint 文档——Office Online插件使用
  17. TCP选项之SACK选项概述
  18. 【数据结构】用Java实现动态数组
  19. (二) 桌面应用程序的用户界面
  20. CentOS7下MySQL服务启动失败原因及解决方法

热门文章

  1. Android中配置高德地图和定位蓝点
  2. 根据基因名称批量提取基因序列
  3. matlab矩阵维度不允许,如何解决索引超过矩阵维度 - MATLAB
  4. 磨金石教育摄影技能干货分享|极简艺术与人文摄影相结合(一)
  5. 【概率论与数理统计】常见分布特征函数推导过程
  6. 新手须知设计的法则 Mark
  7. eXosip2库的使用
  8. 【沐风老师】3dMax模型贴图贴画插件使用方法详解
  9. 最优控制:代数黎卡提方程ARE(Algebraic Riccati Equation)
  10. macos 清空dns缓存_如何在macOS上重置DNS缓存