import android.content.Context;
import android.text.Html;
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.method.LinkMovementMethod;
import android.text.method.Touch;
import android.text.style.ClickableSpan;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.TextView;
public class TextViewFixTouchConsume extends TextView
{
private ExpressionUtil expressionUtil = null;
boolean dontConsumeNonUrlClicks = true;
boolean linkHit;
public TextViewFixTouchConsume(Context context)
{
super(context);
expressionUtil = new ExpressionUtil(context);
}
public TextViewFixTouchConsume(Context context, AttributeSet attrs)
{
super(context, attrs);
expressionUtil = new ExpressionUtil(context);
}
public TextViewFixTouchConsume(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
expressionUtil = new ExpressionUtil(context);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
linkHit = false;
boolean res = super.onTouchEvent(event);
if (dontConsumeNonUrlClicks)
return linkHit;
return res;
}
//此处改成自己想显示的内容。我这是处理表情expressionUtil.getExpressionString(String string)-----处理表情类,
public void setTextViewHTML(Context context,String html)
{
//SpannableString spannableString = expressionUtil.getExpressionString(html);
//setText(spannableString);
setText(html);
}
public static class LocalLinkMovementMethod extends LinkMovementMethod
{
static LocalLinkMovementMethod sInstance;
public static LocalLinkMovementMethod getInstance()
{
if (sInstance == null)
sInstance = new LocalLinkMovementMethod();
return sInstance;
}
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event)
{
int action = event.getAction();
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN)
{
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0)
{
if (action == MotionEvent.ACTION_UP)
{
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN)
{
Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]));
}
if (widget instanceof TextViewFixTouchConsume)
{
((TextViewFixTouchConsume) widget).linkHit = true;
}
return true;
} else
{
Selection.removeSelection(buffer);
Touch.onTouchEvent(widget, buffer, event);
return false;
}
}
return Touch.onTouchEvent(widget, buffer, event);
}
}
}
相关推荐
ESWA投稿全流程避坑指南:从LaTeX模板到审稿状态查询(附最新资源链接)
本文提供了一份详尽的ESWA期刊投稿全流程指南,涵盖从LaTeX模板深度适配、Cover Letter撰写,到Editorial Manager系统操作、审稿状态解析等关键环节。重点解析了投稿准备中的常见“雷区”与文件合规性要求,并分享了收到审稿意见后的高效修改与回复策略,旨在帮助研究者规避流程陷阱,提升投稿效率与成功率。
SpannableStringBuilder 点击事件失效
代码】SpannableStringBuilder 点击事件失效。
PSOC Creator 入门教程超详细
最近工作原因需要使用到赛普拉斯的一款芯片,奈何以前没有用过,所以趁这次也学习了一些简单的用法,总结一下,希望能帮到有需要朋友,因为网上关于这方面的文章少的可怜,详细点的更是少之又少!废话少说,正文开始.
使用clickablespan时点击无效问题
有时候一行文字显示多种样式,不想布局文件太复杂,用一个TextView搞定,这时候就会用到SpannableString或者SpannableStringBuilder。 这次在给SpannableStringBuilder设置ClickableSpan时发现点击事件无效,这倒是第一次遇到。基本的像setSpan()要在setText()之前或者setText()内容是SpannableStri
深度学习之Pytorch---本人踩过的坑(报错总结)第十篇
深度学习之Pytorch安装时遇到的问题—本人踩过的坑(报错总结) 报错一:pip install torchvision 出现“由于目标计算机积极拒绝,无法连接”的问题 解决方案:找到自己浏览器的工具或选项,我的是火狐,具体解决方案如下图 然后找到桌面左下角,点击搜索internet,然后点击internet选项 最后回到Anaconda Prompt命令行输入pip install...
青龙人形机器人硬件平台设计全解析:从构型到控制系统的实战指南
本文深度解析了青龙人形机器人硬件平台的设计全流程,从需求分析、构型设计到核心系统实现。文章详细阐述了其43个自由度的仿生构型、高动态性下肢设计、灵巧作业系统以及分布式控制架构,并探讨了旋转关节与直线关节等关键技术选型,为开发者提供了从理论到实践的完整硬件设计指南。
分析 TextView 应用 Spannable 风格后 ellipsize 属性失效
分析 TextView 应用 Spannable 风格后 ellipsize 属性失效 Author: nxliao(xtulnx@126.com) Date: 2013-05-20 环境: 为使 TextView 在超小号字体情况下不因 descent 导致纯中文和纯英文显示不在同一水平线,使用 spannable 风格: favorite.setText(info.get
python基础语法与数据结构
本文摘要: Python基础语法包含输入输出、函数、变量、数据类型及运算符等内容。输入函数input()获取键盘输入并以字符串存储,输出函数print()可格式化输出数据。函数通过def定义,可带参数和返回值,提高代码复用性。变量无需声明类型,可动态赋值。数据类型包括数字、字符串、布尔及复合类型,可通过type()查看。运算符包含算术、赋值等类型,其中复合赋值运算符如+=可简化运算。类型转换函数如int()、str()等可实现显式类型转换。这些基础语法构成Python编程的核心要素。
Android TextView设置自动识别的超链接字体颜色,及自身点击事件无响应的解决办法
前言 我们在给TextView设置超链接的时候,可能最简单的,Android已经给出了一个非常的简单的做法就是: 在xml中设置: <!--all表示匹配所有,web表示匹配网址 --> android:autoLink="web" 或者 //sp为SpannableString Linkify.addLinks(sp, Linkify.WEB_URLS); 如何设置超链接颜色...
AI 学术科研与论文写作的正确打开方式!不套提示词模板,靠这个思路完美实现人机共创
真正的“人机共创”,也就是AI引导我思考的过程,如果你想用你的模糊需求,去写出专业化的学术内容,那是不可能的。对想快速完成某些学术任务的同仁来说,我们完全不用去抠提示词的细节,直接用魔法打败魔法,设计一段优化提示词的结构化提示词(提示词架构),辅助优化你的模糊需求。创建好之后,可以对它提你的任何模糊学术需求,比如写论文、写综述、学术润色等等,它绝不会直接帮你生成,而是先搞懂你的真实意图。以上整个流程,完全没有一句废话,先是思考,再是向你提问弄懂你的意图,最后整合你给出的关键信息,直接优化你给的模糊需求。
让 ABAP 程序天生可翻译:Text Symbols 与 Text Pool 从入门到工程化落地
ABAP 国际化实践:Text Symbols 的工程价值与落地方法 摘要: 本文系统阐述了 ABAP 开发中 Text Symbols 的核心价值与实践方法。通过解耦程序逻辑与语言文本,Text Symbols 实现了代码国际化,避免了硬编码带来的维护难题。文章详细介绍了 Text Pool 结构、两种引用方式(独立引用 TEXT-001 和附着式 '(001)'),以及 SE38 和 SE63 的翻译流程。特别强调最大长度预留、术语统一等工程实践,并提供了 READ TEXTPOOL 自动化检查方案。最
ClickableSpan造成Listview的OnItemClickListener失效的解决办法
为什么80%的码农都做不了架构师?>>> ...
ATE Pin Electronics电路学习总结
PinElectronics(PE)是ATE测试机的核心模拟前端电路,负责ATE与芯片间的信号转换与交互。主要包含四大功能模块:Driver实现逻辑信号到模拟电平的转换(VIH/VIL可编程);Receiver对DUT输出进行采样比较(VOH/VOL判定);ActiveLoad施加可编程电流负载;PPMU进行精密电压/电流测量。PE的性能直接影响功能测试和直流参数测试的精度,需定期校准维护。关键参数包括:Driver电压精度(±5mV)、Receiver比较精度(±10-50mV)、PPMU测量精度(±1-
SpannableStringBuilder导致ellipsize失效(两者冲突)
这是一个自定义的控件,解决SpannableStringBuilder与ellipsize属性冲突的BUG。package com.laka.jiawawa.ui.widget;import android.content.Context; import android.graphics.Canvas; import android.support.v7.widget.AppCompatTextVi
大中型超市收银系统(可直接运行)
光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开
VB摄像头监控
该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制
Android聊天消息列表实现精准文字复制与双击查看全文技术方案
在Android应用开发中,文本选择与复制是基础交互功能,其核心原理基于TextView的文本选择机制和系统ActionMode。通过事件分发与手势识别技术,开发者可以解决复杂布局下的文本选择难题,提升用户体验。这一技术方案在IM、社交、办公类App中具有重要价值,能够实现类似微信聊天消息的精准复制和内容查看功能。本文深入探讨了Android事件冲突处理、自定义SelectionActionModeCallback以及GestureDetector的应用,帮助开发者构建更流畅的交互体验。
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
自定义TextView解决Span点击&长按事件冲突
import android.content.Context; import android.text.Layout; import android.text.Selection; import android.text.Spannable; import android.text.method.BaseMovementMethod; import android.text.style.ClickableSpan; import android.util.AttributeSet; import andro
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
在ListView或RecyclerView的item中使用SpannableStringBuilder对TextView进行文本和图片的拼接造成item所获取宽度不对,导致item的显示内容不全
如标题所说的,我在开发直播间的消息列表功能时,遇到了需要将礼物图片和提示消息文本展示出来,然后在刷新插入的字符拼接图片的item时显示宽度的不对问,需要经过滑动才能获取正确宽度。 代码如下: spanString = new SpannableStringBuilder(sendName + " 送出" + item.getContent() +" "); spanString.setSpan(new ForegroundColorSpan(calcNameColor(send
SpannableString中的ClickableSpan和Textview点击事件冲突解决
SpannableString中的ClickableSpan和Textview点击事件冲突解决
spannableString使用
项目中有个需求,需要对一句话中的部分字体加粗。于是查到了spannableString可以实现这个需求。 主要是spannableString中的setSpan方法,四个can参数分别为: 1,文本所要使用的资源(可以是字体大小,颜色,样式,超链接,下划线等) 2,应用该资源的文本的起始位置 3,应用该资源的文本的结束位置(含前不含后,java的范围设置基本都是含前不含后) 4,只有四种...
Android_用SpannableString实现在同一个TextView中多风格的文字效果
在开发应用过程中经常会遇到显示一些不同的字体风格的信息犹如默认的LockScreen上面的时间和充电信息。对于类似的情况,可能第一反应就是用不同的多个TextView来实现,对于每个TextView设置不同的字体风格以满足需求。 这里推荐的做法是使用android.text.*;和android.text.style.*;下面的组件来实现RichText:也即在同一个TextView中设置不同的
关于listview的item中如果有textview,listview点击item没有效果的解决办法
现在listview里面的textview默认是不会获取焦点的, 但是现在textview都要设置一个属性,要不有警告, 就是这个:android:textIsSelectable="true"的话就会获取焦点, android:textIsSelectable="false"的话就不会获取焦点了, 或者就不加这个属性就行了。 android:focusable="false"这个属性不
TextView支持拷贝&粘帖
让TextView支持长按弹出系统自带的拷贝、粘贴功能,发现国内外的论坛提供的解决方法都不怎么理想。多数用editview来模仿,不过实现的效果实在不怎么好。 从android sdk 11起google添加了新api TextIsSelectable控制TextView是否支持拷贝、粘帖功能,不过这个功能在v11以下则不那么好彩了。 查阅TextView源码发现setTextIsS...
ListView中让TextView中的文字进行单独滚动
TextView不能在ListeView中单独的滚动原因 默认ListView将会拦截MOVE事件向下传递 参见源码 case MotionEvent.ACTION_MOVE: { switch (mTouchMode) { case TOUCH_MODE_DOWN: int pointerIndex = ev.findPoint...
Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问
延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。
838



被折叠的 条评论
为什么被折叠?



