Android 模仿新浪微博“@”功能
来源:互联网 发布:旺旺淘宝网店铺激活 编辑:程序博客网 时间:2024/05/16 05:26
Android 模仿新浪微博“@”功能
项目中有个部分需要模仿新浪微博的@功能:
- 输入@符号之后进入好友列表
- 点击某个人,返回这个人的信息,并以@xxx的格式显示在 EditText 中
- @部分需要变色
- 删除的时候需要把“@xxx”整体直接删除
基于以上几点要求,我有个想法:
通过InputFilter判断用户输入,当有“@”符号输入时,跳转到好友列表页,返回用户信息之后,把文字转换成bitmap,用SpannableString 做实现后面的功能
下面上主要代码
这里是把文字转化成bitmap
private Bitmap getNameBitmap(String name) { /* 把@相关的字符串转换成bitmap 然后使用DynamicDrawableSpan加入输入框中 */ name = "" + name; Paint paint = new Paint(); paint.setColor(getResources().getColor(R.color.color_blue)); paint.setAntiAlias(true); paint.setTextSize(30); Rect rect = new Rect(); paint.getTextBounds(name, 0, name.length(), rect); // 获取字符串在屏幕上的长度 int width = (int) (paint.measureText(name)); final Bitmap bmp = Bitmap.createBitmap(width, rect.height(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmp); canvas.drawText(name, rect.left, rect.height() - rect.bottom, paint); return bmp; }
获取EditText中的内容,并且根据规则,找出要@的人
private void setAtImageSpan(String nameStr) { String content = String.valueOf(mEditText.getText()); if (content.endsWith("@") || content.endsWith("@")) { content = content.substring(0, content.length() - 1); } String tmp = content; SpannableString ss = new SpannableString(tmp); if (nameStr != null) { String[] names = nameStr.split(" "); if (names != null && names.length > 0) { for (String name : names) { if (name != null && name.trim().length() > 0) { final Bitmap bmp = getNameBitmap(name); // 这里会出现删除过的用户,需要做判断,过滤掉 if (tmp.indexOf(name) >= 0 && (tmp.indexOf(name) + name.length()) <= tmp .length()) { // 把取到的要@的人名,用DynamicDrawableSpan代替 ss.setSpan( new DynamicDrawableSpan( DynamicDrawableSpan.ALIGN_BASELINE) { @Override public Drawable getDrawable() { // TODO Auto-generated method stub BitmapDrawable drawable = new BitmapDrawable( getResources(), bmp); drawable.setBounds(0, 0, bmp.getWidth(), bmp.getHeight()); return drawable; } }, tmp.indexOf(name), tmp.indexOf(name) + name.length(), SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); } } } } } mEditText.setTextKeepState(ss); }
以上是主要的代码,完整的demo,点这里
0 1
- Android 模仿新浪微博“@”功能
- Android模仿新浪微博(前言)
- 模仿新浪微博界面设计
- 模仿android新浪微博手机客户端项目
- 模仿android新浪微博手机客户端项目
- Android模仿新浪微博(启动界面&登陆界面)
- Android模仿新浪微博(oauth2.0授权界面)
- Android模仿新浪微博(分页管理界面)
- Android模仿新浪微博(自定义ListView下拉刷新)
- Android模仿新浪微博(写微博界面)
- Android模仿新浪微博(个人信息界面及其他)
- android - 模仿微博的@人功能
- 模仿新浪微博“@”好友搜索功能(支持IE和火狐浏览器)-(咋个办呢 zgbn)
- 模仿新浪微博使用帮助
- 模仿 新浪微博--随便看看
- 安卓模仿新浪微博看看
- 模仿新浪微博随便看看栏目
- 模仿新浪微博要点记录1
- 手机端巧用input[date]
- 合并多个jar包的两种方法
- HDU3234Exclusive-OR(并查集)与HDU3038相似
- 第三次CCF计算器软件能力认证题目--Z字形扫描
- GIT 用法
- Android 模仿新浪微博“@”功能
- Golang+Android(使用HttpURLConnection)实现文件上传
- Eclipse技术博客--地址
- 奔跑吧,魔力膜法!广州市安煊国际企业3月26日首届微商邀您共同起航
- 《C++编程》第二章第4题
- 黑马程序员————java概述—JDK安装及搭建环境
- 用户日志的收集传输存储架构设计讨论
- HTML5+NodeJs实现WebSocket即时通讯
- android 按钮点击1次,点击3次和点击6次触发不同的事件