广告
返回顶部
首页 > 资讯 > 精选 >Android如何实现仿微信@好友功能
  • 164
分享到

Android如何实现仿微信@好友功能

android 2023-05-30 18:05:52 164人浏览 薄情痞子
摘要

这篇文章主要介绍Android如何实现仿微信@好友功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先上个效果图就是这么个功能1. 分析需求输入@跳转到联系人界面,选中一个或者多个好友返回到当前界面按退格键删除整块内

这篇文章主要介绍Android如何实现仿微信@好友功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

先上个效果图

Android如何实现仿微信@好友功能

就是这么个功能

1. 分析需求

输入@跳转到联系人界面,选中一个或者多个好友返回到当前界面

按退格键删除整块内容

块内的内容可编辑,编辑完了之后将不附带@功能,只是单纯的文字

2. 开始编码

既然是文本输入首先继承EditText自定义一个控件

public class MsgEditText extends AppCompatEditText { public MsgEditText(Context context) {  super(context); } public MsgEditText(Context context, AttributeSet attrs) {  super(context, attrs); } public MsgEditText(Context context, AttributeSet attrs, int defStyleAttr) {  super(context, attrs, defStyleAttr); }}

到底从哪里开始入手呢,首先完成变成块的需求,

无意中看到这个项目https://GitHub.com/g707175425/CloudEditText ,他是这么写的

 private void generateOneSpan(Spannable spannableString, UnSpanText unSpanText) {  //生成一个TextView  View spanView = getSpanView(getContext(),  unSpanText.showText.toString(), getMeasuredWidth());  //再将TextView转换为一个图片  BitmapDrawable bitmpaDrawable = (BitmapDrawable) UIUtils.convertViewToDrawable(spanView);  bitmpaDrawable.setBounds(0, 0, bitmpaDrawable.getIntrinsicWidth(), bitmpaDrawable.getIntrinsicHeight());  //最后将这个图片放到Span里,  MyImageSpan what = new MyImageSpan(bitmpaDrawable, unSpanText.showText.toString(),unSpanText.returnText);  final int start = unSpanText.start;  final int end = unSpanText.end;  spannableString.setSpan(what, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  //设置一个Span  spannableString.setSpan(touchableSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }

看到这里我们就记得了一个关于SpanableString的用法,它可以设置图片,可以随意的设置文字的背景的前景,等等一系列比较酷炫的效果,而且只需要一个TextView,如果需要深入了解Span,可自行百度和Google,关于Span的进阶用法,于是就有了下面的实现

//这个是需要成块删除的内容 private class MyTextSpan extends MetricAffectingSpan {  private String showText;  private long userId;  //userId是为了适应需求,如果不需要请自行去掉  public MyTextSpan(String showText, long userId) {   this.showText = showText;   this.userId = userId;  }  public String getShowText() {   return showText;  }  public long getUserId() {   return userId;  }  @Override  public void updateMeasureState(TextPaint p) {  }  @Override  public void updateDrawState(TextPaint tp) {  } } //这个是非整块删除的内容,当然你如果想也是可以删除的 private class UnSpanText {  int start;  int end;  String returnText;  UnSpanText(int start, int end, String returnText) {   this.start = start;   this.end = end;   this.returnText = returnText;  } }

刚开始我是这么写的  

//外部调用一个增加Span的方法 public void addSpan(String showText, String returnText, long userId) {  getText().append(showText);  SpannableString spannableString = new SpannableString(getText());  makeSpan(spannableString, new UnSpanText(spannableString.length() - showText.length(), spannableString.length(), showText, returnText), userId);  setText(spannableString);  setSelection(spannableString.length()); } //生成一个需要整体删除的Span private void makeSpan(Spannable sps, UnSpanText unSpanText, long userId) {  MyTextSpan what = new MyTextSpan(unSpanText.returnText, userId);  int start = unSpanText.start;  int end = unSpanText.end;  sps.setSpan(what, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }

写到现在这个整块添加已经做好了,下面开始做整块删除,刚开始的时候我是模仿上面的CloudEditText写的,但我发现好像会用各种问题,于是想了一种方法

 @Override protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) {  super.onTextChanged(text, start, lengthBefore, lengthAfter);  //向前删除一个字符,@后的内容必须大于一个字符,可以在后面加一个空格  if (lengthBefore == 1 && lengthAfter == 0) {   MyTextSpan[] spans = getText().getSpans(0, getText().length(), MyTextSpan.class);   for (MyTextSpan myImageSpan : spans) {    if (getText().getSpanEnd(myImageSpan) == start && !text.toString().endsWith(myImageSpan.getShowText())) {     getText().delete(getText().getSpanStart(myImageSpan), getText().getSpanEnd(myImageSpan));     break;    }   }  } }

上面的意思就是,如果你在EditText中执行删除一个字符的时候,判断前面一个是否是一个Span,如果是自定义的Span就把Span一同删除,关于这个,我可是测试可各种操作才定为这样的

最后是获取需要@的人员名单

 //获取用户Id列表,这只是个参考,可根据需求修改 public String getUserIdString() {  MyTextSpan[] spans = getText().getSpans(0, getText().length(), MyTextSpan.class);  StringBuilder builder = new StringBuilder();  for (MyTextSpan myTextSpan : spans) {   String realText = getText().toString().substring(getText().getSpanStart(myTextSpan), getText().getSpanEnd(myTextSpan));   String showText = myTextSpan.getShowText();   if (realText.equals(showText)) {    builder.append(myTextSpan.getUserId()).append(",");   }  }  if (!TextUtils.isEmpty(builder.toString())) {   builder.deleteCharAt(builder.length() - 1);  }  return builder.toString(); }

以上是“Android如何实现仿微信@好友功能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Android如何实现仿微信@好友功能

本文链接: https://www.lsjlt.com/news/220360.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android如何实现仿微信@好友功能
    这篇文章主要介绍Android如何实现仿微信@好友功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先上个效果图就是这么个功能1. 分析需求输入@跳转到联系人界面,选中一个或者多个好友返回到当前界面按退格键删除整块内...
    99+
    2023-05-30
    android
  • Android如何实现仿微信朋友圈全文、收起功能
    小编给大家分享一下Android如何实现仿微信朋友圈全文、收起功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!效果图具体代码(详细解释在代码注释中都有,这里就省...
    99+
    2023-05-30
    android
  • Android中使用ListView模拟微信好友功能
    效果图:分析:创建listView创建数据创建适配器  将数据放到呈现数据的容器里面。  将这个容器(带数据)连接适配器。    其实是直接在我们自己写的adapter的getView重载方法中返回连接的view。    View view...
    99+
    2023-05-30
    android listview 微信好友
  • Android如何实现仿微信右滑返回功能
    这篇文章将为大家详细讲解有关Android如何实现仿微信右滑返回功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。先上效果图,如下:先分析一下功能的主要技术点,右滑即手势判断,当滑到一直距离时才执行返回,...
    99+
    2023-05-30
    android
  • Android 实现微信,微博,微信朋友圈,QQ分享的功能
    Android 实现微信,微博,微信朋友圈,QQ分享的功能 一、去各自所在的开发者平台注册相应的Key值;引入相关jar包、权限等 二、ShareUtil工具类 impor...
    99+
    2022-06-06
    朋友圈 Android
  • Android 仿微信朋友圈点赞和评论弹出框功能
    贡献/下载源码:https://github.com/mmlovesyy/PopupWindowDemo 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹...
    99+
    2022-06-06
    仿微信 朋友圈 Android
  • Android仿微信朋友圈点击加号添加图片功能
    本文为大家分享了类似微信朋友圈,点击+号图片,可以加图片功能,供大家参考,具体内容如下 xml: <?xml version="1.0" encoding=...
    99+
    2022-06-06
    图片 朋友圈 Android
  • android实现微信朋友圈发布动态功能
    本文实例为大家分享了android仿微信朋友圈发布动态功能的具体代码,供大家参考,具体内容如下 效果图: 本文概述 用到的开源库:仿照微信的图片选择器,Luban压缩图片,g...
    99+
    2022-06-06
    朋友圈 动态 Android
  • Android仿微信雷达辐射搜索好友(逻辑清晰实现简单)
    不知不觉这个春节也已经过完了,遗憾家里没网,没能及时给大家送上祝福,今天回到深圳,明天就要上班了,小伙伴们是不是和我一样呢?今天讲的是一个大家都见过的动画,雷达搜索好友嘛,原理...
    99+
    2022-06-06
    雷达 Android
  • Android仿微信朋友圈全文收起功能示例(附源码)
    在众多的社交类软件中,朋友圈是必不可少的,可以与好友、同学等分享自己的日常和有意思的事情,在开发社交类App时,朋友圈发表的内容你不可能让他全部显示,全部显示的话用户体验度会非...
    99+
    2022-06-06
    示例 朋友圈 源码 Android
  • Flutter实现微信朋友圈功能
    本文实例为大家分享了Flutter实现微信朋友圈功能的具体代码,供大家参考,具体内容如下 今天给大家实现一下微信朋友圈的效果,下面是效果图 下面还是老样子,还是以代码的方式进行讲解...
    99+
    2022-11-12
  • android 仿微信demo——注册功能实现(移动端)
    目录移动端注册功能实现测试总结移动端注册功能实现 微信的注册界面每一个文本段都有下划线且默认颜色都是灰色,当其中一个文本段获取焦点会将下划线的颜色变为绿色,而且文本输入框的光标也是绿...
    99+
    2022-11-12
  • android 仿微信demo——注册功能实现(服务端)
    目录服务端注册功能实现创建项目创建web层和客户端完成数据交互创建service层处理业务逻辑功能创建dao层操作数据库通过JDBC工具类访问数据库mysql中创建数据库和表测试总结...
    99+
    2022-11-12
  • android 仿微信demo——登录功能实现(移动端)
    目录移动端登录功能实现测试移动端登录功能实现 登录功能基本和注册一样,唯一不同的是登录可以实现两种登录方式(微信号和手机号),也就是布局不一样。所以需要两个布局,两个activity...
    99+
    2022-11-12
  • android 仿微信demo——登录功能实现(服务端)
    目录服务端登录功能实现测试总结 上一篇文章实现了微信登录的移动端功能,下面继续完善功能,实现微信登录服务端功能 服务端登录功能实现 在以往文章里已经实现了服务端mvc框架,而登录和...
    99+
    2022-11-12
  • HTML5怎么实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
    小编给大家分享一下HTML5怎么实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!这是分享按钮:<button onclick="call()&q...
    99+
    2023-06-09
  • Android实现微信朋友圈发本地视频功能
    一、前言 前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器 本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布...
    99+
    2022-06-06
    朋友圈 Android
  • 微信小程序转发好友的功能怎么实现
    这篇文章主要介绍了微信小程序转发好友的功能怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序转发好友的功能怎么实现文章都会有所收获,下面我们一起来看看吧。首先介绍一个微信小程序的API:onSha...
    99+
    2023-06-26
  • Android中使用listview实现qq/微信好友列表
    首先附上运行结果: 如果你没有学过listview请你先看一看基本知识。不想再说的那么细了 太多了。 首先是listview布局 <?xml version...
    99+
    2022-06-06
    列表 listview Android
  • 关于Android实现简单的微信朋友圈分享功能
    1.先下载微信分享的jar包放在lib目录下,并且添加依赖, 清单文件添加 <activity android:name=".wxapi.WXEntryA...
    99+
    2022-06-06
    朋友圈 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作