android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)
在做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)相关推荐
- Android自定义导览地图组件(一)
丨版权说明 : <Android自定义导览地图组件(一)>于当前CSDN博客和乘月网属同一原创,转载请说明出处,谢谢. 鉴于Android关于自定义导览地图的相关资料以及 ...
- android 自定义本地验证码demo,Android 自定义验证码输入框的实例代码(支持粘贴连续性)...
需求 1.能自定义输入框个数和样式 2.支持长按粘贴或剪切板内容自动填充(粘贴连续性) 其中第2点是最为重要的,正是其他人没有这点,逼得自己弄一个 示例 别人的示例: 粘贴居然不支持连续性,只能粘贴第 ...
- Android自定义九宫格手势解锁组件
项目来源 别的不说,先看一下效果图: 九宫格手势图案解锁功能在很多应用中都在使用,本文介绍的组件来自于开源项目PatternLocker的翻写,原工程是使用Kotlin开发的,由于我们项目是使用jav ...
- Android 自定义本地图片加载库,仿微信相册
总结一下微信的本地图片加载有以下几个特点,也是提高用户体验的关键点 1.缩略图挨个加载,一个一个加载完毕,直到屏幕所有缩略图都加载完成 2.不等当前屏的所有缩略图加载完,迅速向下滑,滑动停止时立即加载 ...
- Android自定义电池电量显示组件(kotlin,java)
最近产品研发需求需要显示在线设备的电池电量状态,然后UI给出的效果的图是这样的 于是就开始了自定义个,因为是项目特定的UI所以很多属性都没有直接抽取到styles里面了,直接上代码(因为项目是使用ko ...
- android 自定义view之雷达扫描,基于Android自定义控件实现雷达效果
如何制作出类似雷达扫描的效果,具体方法如下 一.效果图 二.实现思路 1.自定义控件RadarView用来画雷达的效果图,可以自定义属性包括 backgroundColor:背景颜色 circleNu ...
- android弹窗不能手动关闭_vue3.0系列:Vue3自定义PC端弹窗组件V3Layer
今天给大家分享的是Vue3系列之自定义桌面端对话框组件v3layer. V3Layer 基于vue3.0构建的多功能PC网页端弹窗组件.拥有超过10+种弹窗类型.30+种参数配置,支持拖拽(自定义拖拽 ...
- 基于Android的本地电子书阅读器的设计与实现Ebook(1)
基于Android的本地电子书阅读器的设计与实现Ebook(1) 学习Android时间不久,试着做了一个本地电子书阅读器APP,因为知识浅薄并不能像其他大佬一样实现各种繁杂的功能,但可以实现基本的阅 ...
- android 自定义相册选择,Android通过手机拍照或从本地相册选取图片设置头像
像微信.QQ.微博等社交类的APP,通常都有设置头像的功能,设置头像通常有两种方式: 1.让用户通过选择本地相册之类的图片库中已有的图像,裁剪后作为头像. 2.让用户启动手机的相机拍照,拍完照片后裁剪 ...
最新文章
- OpenCV java 线性滤波(16)
- WebX5 button tabs的bind-text属性设置
- js里的null 与undefined
- linux 系统、命令、软件
- uva 11995——I Can Guess the Data Structure!
- 交换机命令行配置与VLAN
- apollo local 模式_「架构」 - 配置中心 Apollo基本使用
- 311.	Sparse Matrix Multiplication
- 确定要离开当前页面吗
- 十大网络安全策略 打造坚固的内网
- 2017 ACM-CCPC 秦皇岛站 总结
- Linux之进程管理——查看进程
- C# 实现屏幕键盘 (ScreenKeyboard)
- c语言我喜欢你,【幻 仿】UC启动时的我喜欢你
- 管理ELK进程工具: Supervisor Cesi
- 在线预览 Word、Excel、PowerPoint 文档——Office Online插件使用
- TCP选项之SACK选项概述
- 【数据结构】用Java实现动态数组
- (二) 桌面应用程序的用户界面
- CentOS7下MySQL服务启动失败原因及解决方法