android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)
来源:互联网 发布:淘宝买家信誉度怎么看 编辑:程序博客网 时间:2024/05/20 22:39
在做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); } @Override public boolean enoughToFilter() { // 如果字符中包含'@'并且不在第一位,则满足条件 return getText().toString().contains("@") && getText().toString().indexOf("@") > 0; }}
//指定从哪个字符开始联想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; } } }}布局文件
<com.micen.buyers.view.mailassociate.MailBoxAssociateView android: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的实现方式,整个工程我放到了我的资源中,有需要的可 下载,可直接放到项目中使用。
0 0
- android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)
- Android 邮箱自动补全-MultiAutoCompleteTextView实现
- Android绝黑剑之AutoCompleteTextView、MultiAutoCompleteTextView之智能联想
- MultiAutoCompleteTextView自动联想查找
- android 组件AutoCompleteTextView和MultiAutoCompleteTextView实例
- Android学习——MultiAutoCompleteTextView组件
- Android仿QQ输入法词根联想AutoCompleteTextView及多提示项群发邮件分隔录入MultiAutoCompleteTextView
- android之MultiAutoCompleteTextView
- android AutoCompleteTextView和MultiAutoCompleteTextView
- 学Android---MultiAutoCompleteTextView
- Android基础-MultiAutoCompleteTextView用法
- Android用户界面 UI组件--自动提示输入框 AutoCompleteTextView和MultiAutoCompleteTextView
- 【Android】Android自定义组件
- 基于WheelView 组件分析自定义组件
- MultiAutoCompleteTextView
- MultiAutoCompleteTextView
- MultiAutoCompleteTextView
- MultiAutoCompleteTextView
- mongoDB 入门指南、示例
- mysql语句中使用like后面的%(百分号)的问题
- 字符串拷贝
- DataVision
- 苹果第四财季净利润85亿美元 同比增长13%
- android自定义本地邮箱联想组件(基于MultiAutoCompleteTextView)
- pmp认证
- 谈谈JAVA程序的反编译
- 阿里2015校招面试回忆
- 封装bootbox.js对话框
- Android应用程序间的内容分享机制
- IOS-UILabel
- 协同运营,精细管理
- Flume NG 学习笔记(一)简介