Android TextView中添加链接并在链接部分字体变色可点击

Android TextView设置文本多点击事件,多种颜色,下划线 String URL = "《注册协议》"; String URL2 = "《隐私政策》"; String AND= "和"; String HEAD = "我们更新了"; String FOOT = ",请注意查看"; private String TEXT = HEAD + URL +HINT+URL2+ FOOT; SpannableStringBuilder builder = new SpannableStringBuilder(); builder.append(TEXT); builde. 阅读详情


这么一个效果:一行文本当中 前面显示黑色颜色的“超文本:”,后面显示红色颜色的“http://www.baidu.com” 并且要求红色字体的部分可以点击,有响应的点击事件进行处理,你该如何实现?


最简单的实现方法,两个TextView ,第一个显示黑色字体的“超文本”,第二个显示红色字体的“http://www.baidu.com”,然给给第二个TextView添加一个点击事件。

想想,确实可以这么实现,对于一般情况可以

但是,文本长度过长的情况下呢,会出现第二个TextView未能一行显示的文本会换行,但是不是在第二行的一开始

而你希望的效果是   

显然用两个TextView 不好实现,那么如果使用一个TextView实现一段文字,既可以有不同的颜色,也可以实现一段文字不同部分的文字有点击事件呢?

首先,我们必须知道SpannableString 类可以实现同一个TextView不同部分的颜色不同,

不会的可以先去学习下: (转) SpannableString与SpannableStringBuilder

既然我们知道了如何实现一个TextView显示不同的颜色,那么还有一个问题就是如何实现点击 同一个TextView不同部分的文字进行相应的响应操作

现在就学习:

源码如下:

public abstract class ClickableSpan extends CharacterStyle implements UpdateAppearance {
    /**
     * Performs the click action associated with this span.
     */
    public abstract void onClick(View widget);  
    /**
     * Makes the text underlined and in the link color.
     */
    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(ds.linkColor);            //设置可以点击文本部分的颜色
        ds.setUnderlineText(true);            //设置该文本部分是否显示超链接形式的下划线
    }
}

可能有点看不懂,但是不用管,会怎么使用就行,那么怎么使用呢?

1、首先源码里说:

If an object of this type is attached to the text of a TextView
 * with a movement method of LinkMovementMethod,

那么:

对于一个TextView 先必须要使用  TextView.setMovementMethod(LinkMovementMethod.getInstance());

给一个TextView设置这个属性有什么用呢? 其实就是给这个TextView实现超链接效果,不设置当然就没有点击事件了

2、源码里又说:

the affected spans of
 * text can be selected.  If clicked, the {@link #onClick} method will
 * be called.  

那么就是说你setSpan()部分的文本可以显示,并且点击可以实现OnClick()接口回调

所以你需要写一个类来实现ClickableSpan

并且  .setSpan(继承ClickableSpan的类,对应效果的开始位置,对应效果的结束位置, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

----------------------------------------------------------------------------------------------

让我们通过一个Demo来学习 ClickableSpan 的使用:

1、首选 自定义一个类继承ClickableSpan

class MyClickText extends ClickableSpan{
        private Context context;

        public MyClickText(Context context) {
            this.context = context;
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            //设置文本的颜色
            ds.setColor(Color.RED);
            //超链接形式的下划线,false 表示不显示下划线,true表示显示下划线
            ds.setUnderlineText(false);
        }

        @Override
        public void onClick(View widget) {
            Toast.makeText(context,"发生了点击效果",Toast.LENGTH_SHORT).show();
        }
    }
2、对TextView进行操作
 private TextView clicktext;
        clicktext = (TextView) findViewById(R.id.clicktext);
     
        SpannableString str = new SpannableString("超文本:http://www.baidu.com");
        str.setSpan(new MyClickText(this),4,str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
     //当然这里也可以通过setSpan来设置哪些位置的文本哪些颜色
        clicktext.setText(str);
        clicktext.setMovementMethod(LinkMovementMethod.getInstance());//不设置 没有点击事件
        clicktext.setHighlightColor(Color.TRANSPARENT); //设置点击后的颜色为透明

大家看到这里,感觉是不是又长知识了,但是细细琢磨,这个类到底有什么实际的使用呢?

在社交类APP中,一般都用类似QQ空间的功能吧,一个页面以列表的形式显示所有的动态(说说),每一个动态(说说)里又对应着相应的评论

那么我们是不是可以用ClickableSpan类来实现 一个TextView显示不同颜色的文字并且点击相应的位置会有对应的响应事件的效果呢

使用中用到所以转来以备不时之需 转载链接

http://www.tuicool.com/articles/BBVnue








Android设置TextView中部分字体颜色和点击事件 最近接到一个新需求,在一个TextView中实现部分字体的颜色不同于其它字体,且点击该部分文字时实现跳转的功能。一开始想着用多个TextView连起来实现功能,优化代码时再想想,这也太弱智了点儿吧!   果断Google搜索一下别的Coder是怎么实现的,其实Android在TextView中已经为开发者提供了这样的API: /** * This is the class for text whose content and markup can both be changed. * 这是一个内容和标.. 阅读详情

相关推荐

Android TextView实现部分文字变色与点击交互完整方案

虽然URLSpan原生支持标准网络链接,但在实际业务中,我们经常需要将文本片段与非网页目标关联,比如跳转到 App 内某个 Fragment、启动电话拨号界面或发送邮件。这就要求我们能够灵活地创建 URI 并将其绑定到指定文本区间。在Android开发中,虽然原生TextView提供了强大的文本展示能力,但当面对复杂且高频的富文本交互需求时,其API设计显得不够灵活。

weixin_31419153的博客 1037

android中怎么设计点击响应,Android应用开发Android中TextView设置不同的颜色并且可以响应点击事件...

本文将带你了解Android应用开发Android中TextView设置不同的颜色并且可以响应点击事件,希望本文对大家学Android有所帮助。<Android中TextView设置不同的颜色并且可以响应点击事件。Android中TextView设置不同的颜色并且可以响应点击事件。TextViewtext=findViewById(R.id.text);Stringm...

weixin_31800911的博客 291

从3D相机数据到三维模型:Halcon实战深度图、亮度图与点云转换全流程

本文详细解析了如何利用Halcon将3D相机采集的深度图、亮度图转换为三维点云模型的完整流程。通过实战案例分享,涵盖数据格式处理、点云生成方法(SDK接口与纯Halcon实现)、三维模型可视化优化等关键技术,帮助工程师解决工业检测中的实际难题,提升三维重建精度与效率。

weixin_42525005的博客 397

Android TextView设置自动识别的超链接字体颜色,及自身点击事件无响应的解决办法

前言 我们在给TextView设置超链接的时候,可能最简单的,Android已经给出了一个非常的简单的做法就是: 在xml中设置: <!--all表示匹配所有,web表示匹配网址 --> android:autoLink="web" 或者 //sp为SpannableString Linkify.addLinks(sp, Linkify.WEB_URLS); 如何设置超链接颜色...

苦逼的程序猿☺ 1963

ASReview:基于主动学习的AI文献筛选工具,提升科研效率

主动学习是机器学习的一个重要分支,其核心原理是让算法能够主动选择最有价值的数据进行标注,从而以更低的成本获得更好的模型性能。这一技术通过人机协作的闭环流程,显著提升了数据标注和模型训练的效率和精度。在工程实践中,主动学习尤其适用于数据标注成本高昂或数据类别不平衡的场景,例如医学影像分析、自然语言处理中的文本分类以及推荐系统的冷启动问题。通过优先标注模型最不确定的样本,它能够有效解决传统机器学习面临的冷启动和数据稀疏性挑战。本文聚焦的ASReview项目,正是将主动学习原理应用于系统文献综述这一具体场景,通过

weixin_28725959的博客 432

告别偏色!手把手教你用i1Profiler 3.5为喷墨打印机制作专属ICC曲线(附D50/D65光源选择指南)

本文详细介绍了如何使用i1Profiler 3.5为喷墨打印机制作专属ICC曲线,解决设备偏色问题。从色彩管理基础、软件配置到色块打印与测量实战技巧,逐步指导用户完成曲线制作,并提供了D50/D65光源选择指南,确保色彩还原精准。适合摄影师和设计师提升打印质量。

weixin_30613343的博客 1万+

Android-TextView设置多种颜色及部分点击事件

前言最近项目中有一个小小的细节,就是一般温馨提示语,一段文字,但是中间会包含一些字体可点击,有特殊颜色,比如下图的温馨提示:一般实现方式有以下几种: 1.TextView 拼接 2.加载 Html 3.使用 SpannableString其中的第一种方法,这里就不考虑了,因为这里也不确定字体到底占几行,并且链接文字位置也不可控 那下面就来看一下后面两种的实现方式。用Html实现这里主

qq_33703877的博客 4793

基于JavaFX的Http Server模拟器

源码地址 GitHub - DayRain/http-server-simulator: http server 模拟器 功能描述 HttpServer模拟器,通过简单的配置即可模拟第三方服务端,用于接收和响应HTTP请求。 支持同时模拟多个服务、动态添加接口、动态配置返回值。 使用说明 运行 exe运行 编译代码后,点击exe直接运行 代码运行 下载好代码后,运行主类ApplicationStarter即可 新建服务 主界面如下 点击 文件-新建 创建新的服务 ...

小楼夜听雨的博客 2534

安卓TextView修改字体和设置字体渐变色

安卓修改默认显示的字体和修改TextView使其含有渐变色功能

negineko的博客 4106

超级详细!!!新手使用AutoDL跑深度学习(MixVPR项目)的学习记录

新手第一次在AutoDL上跑深度学习的实验,遇到一些问题,简单记录一下。如果大家发现问题,欢迎和我讨论。

weixin_45152283的博客 5万+

Redhawk: 为什么STA CHECK中switch cell覆盖率为0(STA file中switch control pin没有timing window)?

如题,做dynamic analysis时,不需要switch cell的timing window信息,但是做low power analysis需要做上电时switch cell的timing window就是必须的了,本文对switch cell control pin没有timing window (STA CHECK覆盖率为零)的这种现象做分析。

m0_61544122的博客 1197

Android中TextView中加图片,超链接,一部分字或者背景变色。不断补充中

转自:http://www.educity.cn/wenda/163195.html Android中TextView中加图片,超链接,部分字或者背景变色。。。不断补充中   对一个TextView中添加图片或者本身文字颜色或者背景色变化的demo:   布局:android:drawableLeft="@drawable/tv_img",android:drawableTop=

jk17640的专栏 3156

深度剖析XY2-100与SL2-100协议:解锁激光打标核心技术密码

XY2-100和SL2-100是激光打标领域的两种核心控制协议。XY2-100协议采用串行通信,指令集简单,适合常规打标任务,具有成本优势;SL2-100协议支持更高速率(1Mbps以上),具备曲线插补等高级指令,在精密加工领域表现突出。两者的主要差异体现在数据传输(帧结构、速率)、指令集(功能、数量)、参数调节(范围、精度)和错误处理机制等方面。实际应用中,XY2-100适合简单图形的大批量生产,SL2-100更胜任复杂曲面的高精度加工。选择时需综合考虑打标需求、设备兼容性和成本因素,未来两种协议将持续优

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 957

android 局部文件背景,Android中TextView中加图片,超链接,部分字或者背景变色。。。不断补充中...

对一个TextView中添加图片或者本身文字颜色或者背景色变化的demo:布局:android:drawableLeft="@drawable/tv_img",android:drawableTop="@drawable /tv_img",android:drawableRight="@drawable/tv_img" ,android:drawableBottom="@drawable/tv_i...

weixin_42126677的博客 477

XYC Q8开源掌机刷第三方系统教程

分区结束后直接将各种游戏文件放入OD分区的Roms文件夹下

m0_60352504的博客 4569

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

给TextView中的部分文字变色和添加点击

只给textview设置字体颜色CharSequence str=getText("你说啥呢"); SpannableString spannableString1 = new SpannableString(str); spannableString1.setSpan(new ForegroundColorSpan(Color.RED),str.length()-3, str.length(),S

Jage的博客 823

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android中TextView中加图片,超链接,部分字或者背景变色。。。

对一个TextView中添加图片或者本身文字颜色或者背景色变化的demo: 布局:android:drawableLeft="@drawable/tv_img",android:drawableTop="@drawable/tv_img",android:drawableRight="@drawable/tv_img" ,android:drawableBottom="@drawable/tv_

yixinyouni1314的专栏 1304

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android中TextView 添加ClickableSpan后点击选中文字背景变色问题

TextView中的setHighlightColor(int color)用于设置选中文字背景色高亮显示。 比如以下: public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super...

每一件自己觉得值得的事都要不留余力的去做 1199

Android Textview 支持局部点击、ClickableSpan(富文本)、解决LinkMovementMethod滑动冲突

在TextView中包含局部可点击的链接,且改链接其他地方也是有相应的点击事件,文本中定义了格式, public void setSpan(Object what, int start, int end, int flags) {}点击得知道在文本中哪些文字是需要点击的。 Examples 格式:Hello Android<b>Click Detail # https://ww...

zyy_give的博客 2964

让TextView展示不同颜色字体,让局部字体拥有点击事件

发现很多时候展示一堆文字,需要让局部的某些字变粗啊,变大、变颜色、能点击等等要求,今天在这简单总结下方便日后直接复用(用html写的也很简单,在这就不写了),在这里我用 SpannableString 这个类实现下(SpannableStringBuilder 也可以自己看下,大体相似) String str1 = “欢迎来北京”; String str2 = "一起看"; String

一起&奋斗 697

Android TextView 部分文字点击与变色

SpannableStringBuilder style = new SpannableStringBuilder("同意阅读以下协议《用户使用协议》和《隐私协议》");//必写 不然点击事件无效。ToastUtils.showShort("《用户使用协议》");ToastUtils.showShort("《隐私协议》");

piaomiaozaitianya的博客 1068

Android中TextView中加图片,超链接,部分字或者背景变色。。。不断补充中

对一个TextView中添加图片或者本身文字颜色或者背景色变化的demo: 布局:android:drawableLeft="@drawable/tv_img",android:drawableTop="@drawable/tv_img",android:drawableRight="@drawable/tv_img" ,android:drawableBottom="@drawable/tv_

wutongyu344的专栏 1万+

textview 中间的字变色并可点击

public class MainActivity extends AppCompatActivity { private TextView tv1 ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

a136447572的专栏 472

【Code-Snippet】TextView

1. TextView文字过长,显示省略号 【参考】 必须要同时设置XML和JAVA,而且,java中设置文字必须是在最后。 android:ellipsize="start|end|middle" //省略号的位置 android:singleLine="true" android:lines="2" //行数 复制代码tv.setEllipsize(TextUtils.Trun...

weixin_33842304的博客 185

Android详解之TextView(文本框)详解

TextView(文本框)详解 textStyle:设置字体风格,三个可选值:**normal**(无效果),**bold**(加粗),**italic**(斜体) 带阴影的TextView 涉及到的几个属性: android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用哦! android:shadowRadius:设置阴影的模糊程度,设为0.1...

紫微星的博客 3464

Advanced Android TextView

https://github.com/chiuki/advanced-textview 今日通过一个开源库来分析textview的一些其他玩法。。 getCompoundDrawables方法可以获取这4个位置的图片。然后就可以在文字周围加drawable动画和动画集合等等(animated-rotate和animation-list)。假如要用animated-vector还要另外新建...

crazycat 593
上一篇: Android大图片裁剪解决方案
下一篇: 完美解决 trying to use a recycled bitmap android.graphics.Bitmap@41d的异常
VIPqiangqiang
博客等级 码龄14年 7粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值