• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 点击文本改变改行背景色,弹出对话框,改行背景

点击文本改变改行背景色,弹出对话框,改行背景

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了文本文档怎么改行距,2017年改行做什么,改行做什么好,淘宝店铺改行怎么改,30岁改行做什么好等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

点击文本改变改行背景色,弹出对话框,改行背景


 我想单纯靠一个文本实现微信回复评论的效果,在一列回复文本中点击某一行,然后该行的背景色改变并且弹出对话框,如下图,我们想要回复A,那么就点击A所在的那一行(A回复B:哈哈哈)。

注意,这里两行包括下面一系列的回复文本都是在一个textView中。

网上查了许久,结合自己的一些知识,终于实现了。

 

揭晓答案(步骤如下):

/** * 

  对于第二行来说

   commentName为A

   replyName为B,

   commentContent为内容

* **/

1.

SpannableString commentReplyNameContent = null;

commentReplyNameContent = new SpannableString(commentName + "回复" + replyName + ":" + commentContent);

commentReplyNameContent.setSpan(new ClickableSpan()   //设置点击时候的效果(在这里只是弹出键盘而已)  
{          

     @Override           
public void updateDrawState(TextPaint ds)

{
super.updateDrawState(ds);
ds.setUnderlineText(false); //取消下划线
}
@Override
public void onClick(View widget)

{
showKeyBoard(comment.getComentName()); //弹出键盘
 //或者进行其他操作,comment.getComentName()为要回复的人的名字,即点击这二行的话,comment.getComentName()就为A
}
}, 0, commentName.length() + replyName.length() + commentContent.length() + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
commentReplyNameContent.setSpan //设置A的颜色 (new ForegroundColorSpan(Color.BLUE), 0, commentName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); commentReplyNameContent.setSpan //设置整一行的背景为黑色 (new ForegroundColorSpan(Color.BLACK), commentName.length(), commentName.length() + replyName.length() + commentContent.length() + 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); /** * replyContent为此textView * **/ replyContent.append("\n"); //换行
replyContent.append(commentReplyNameContent);
// 把这一行追加在textView后面 replyContent.setMovementMethod(new MyLinkMovementMethod());//这句话是为了响应点击效果。

 

 2.点击改变那一行的背景色,重写LinkMovementMethod

private class MyLinkMovementMethod extends LinkMovementMethod     
{
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event)
{
int
action = event.getAction();

if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_DOWN
|| action == MotionEvent.ACTION_MOVE)
{
int x = (int) event.getX();
int y = (int) event.getY(); x -= widget.getTotalPaddingLeft();// 返回textView的偏移量,如textView设置了padding=3px,则返回3
y -= widget.getTotalPaddingTop();
/**
* 左侧超出屏幕的偏移量,如一个view可左右滑动,由于此view比较大,左侧的view被挡住了,
* 被挡住的偏移量就是getScrollX(),同理getScrollY()
*/

x += widget.getScrollX();
y += widget.getScrollY(); // 上述的目的是定位出点击的位置 在整个view组件的绝对坐标(不是屏幕的相对坐标)
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
// 获取点击位置的 text的行数
int off = layout.getOffsetForHorizontal(line, x);
// 获取点击位置的偏移量 // 通过偏移量来获取span (具体是通过偏移量对应的span来确定)
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0)
{
if (action == MotionEvent.ACTION_UP)
{
link[0].onClick(widget);
buffer.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), buffer.getSpanStart(link[0]),

buffer.getSpanEnd(link[0]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Selection.removeSelection(buffer); }
else if (action == MotionEvent.ACTION_DOWN)
{ buffer.setSpan(
new BackgroundColorSpan(Color.GRAY), buffer.getSpanStart(link[0]),

buffer.getSpanEnd(link[0]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
else if (action == MotionEvent.ACTION_MOVE)
{ buffer.setSpan(
new BackgroundColorSpan(Color.TRANSPARENT), buffer.getSpanStart(link[0]),

buffer.getSpanEnd(link[0]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Selection.removeSelection(buffer);
}
return true;

}
else
{
Selection.removeSelection(buffer);
}
}
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 点击文本改变改行背景色,弹出对话框,改行背景

相关文章

  • 2017-05-26Android Studio NDK基础使用
  • 2017-05-26ScrollView中嵌套GridView,ListView只显示一行的解决办法,scrollviewgridview
  • 2017-05-26android开发之路01,android之路01
  • 2017-05-26关于Android滑动冲突的解决方法(二)
  • 2017-05-26对沉浸式状态栏的理解,沉浸式状态栏理解
  • 2017-05-26Smalidea+IntelliJ IDEA/Android Studio动态调试安卓app教程
  • 2017-05-26xUtils3,xutils3github
  • 2017-05-26Android进程通信之两种序列化方式分析
  • 2017-05-26使用Android-Debug-Database 在浏览器中查看App的数据库,清科zdatabase数据库
  • 2017-05-26Android ShareSDK快速实现分享功能,androidsharesdk

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • hellocharts-android-Android图表开源库的使用(一)
    • 跨进程SharedPreferences异常。,sharedpreferences
    • Atitit.android播放smb 网络邻居视频文件解决方案,atitit.androidsmb
    • Remote Displayer for Android V1.0,displayerandroid
    • Android 系统版本&API对照表,android系统版本
    • 存储链路问题导致的RAC异常
    • ArcGIS Android工程迁移到其他电脑不能打开的问题,arcgisandroid
    • 关于Android项目隐藏标题栏的方法总结,android标题栏
    • HandlerThread,handlerthread用法
    • 踩坑实录 Android studio中关于 No cached version of **** available for of处理办法,androidcached

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有