安卓富文本部分高亮及点击事件

安卓富文本部分高亮及点击事件

  • 前言
  • 一、富文本是什么?
  • 二、实现方法
    • 1.使用html
    • 2.使用SpannableString
  • 总结


在这里插入图片描述

前言

富文本其实不是很常用,但有遇到了过后使用很方便的场景,例如免责声明。这时候就很重要了,前段时间遇到了,自己重新整理了下方便以后找


一、富文本是什么?

安卓富文本是一种允许用户以富文本格式(如加粗、斜体、下划线、颜色、字号等)输入和显示文本内容的技术。在安卓应用程序中,富文本可以用于各种用途,例如文字编辑器、邮件应用、社交媒体应用、文本处理应用等。通过使用富文本,用户可以更加直观地表达自己的想法和情感,也可以更好地组织和呈现文本内容。

二、实现方法

1.使用html

以下是一个简单的示例:

  1. 首先,在你的安卓应用中创建一个名为“rich_text.html”的html文件,并将其放置在“assets”文件夹中。

  2. 在该文件中,你可以使用html标签来创建富文本。例如:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>富文本示例</title>
</head>
<body><h1>这是一个标题</h1><p>这是一段文本。</p><p>这是另一段文本。</p><ul><li>列表项一</li><li>列表项二</li><li>列表项三</li></ul><ol><li>有序列表项一</li><li>有序列表项二</li><li>有序列表项三</li></ol><p>下面是一个图片:</p><img src="https://www.example.com/image.png" alt="示例图片"><p>这是一个链接:</p><a href="https://www.example.com">点击跳转</a>
</body>
</html>
  1. 然后,在你的代码中加载该html文件并显示出来。示例如下:
WebView webView = findViewById(R.id.webView); // 获取WebView控件
webView.getSettings().setJavaScriptEnabled(true); // 允许执行JavaScript
webView.loadUrl("file:///android_asset/rich_text.html"); // 加载html文件
  1. 最后,在你的布局文件中添加一个WebView控件:
<WebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent" />

这样,你就可以在安卓应用中使用html实现富文本了。

2.使用SpannableString

代码如下(示例):

    /*** @time 2023/9/12 17:08* @Description: 设置富文本*/private fun setRichText() {val content = resources.getString(R.string.tv_check_text)val replaceTxt = resources.getString(R.string.tv_check_text_replace)val sb = SpannableString(content) //content表示文本内容val startIndex = content.indexOf(replaceTxt)val endIndex = startIndex + replaceTxt.length//让超链接的点击事件生效mBinding.ctvCheckText.movementMethod = LinkMovementMethod.getInstance()val clickSpan: ClickableSpan = object : ClickableSpan() {override fun onClick(widget: View) {Log.i(TAG, "setRichText: click$replaceTxt")}override fun updateDrawState(ds: TextPaint) {ds.run { //这里可以动态设置点击区域字符的字体样式,比如颜色、字体、大小、下划线、删除线等
//                    typeface = FontManager.getNumberFont()color = ContextCompat.getColor(context!!, R.color.ff00b4ff)}}}sb.setSpan(clickSpan, //span类型 specailColor颜色startIndex, //span的起始indexendIndex, //span的结束index(一般为startIndex + replaceTxt.length)Spannable.SPAN_EXCLUSIVE_EXCLUSIVE //span类型,设置startIndex和endIndex的开闭区间)mBinding.ctvCheckText.text = sb}

代码说明:

  • content 就是我们需要展示的富文本
  • replaceTxt 是展示的富文本中,我们需要操作的部分,示例中改变了其中的颜色
  • sb SpannableString
  • startIndex 需要操作部分的开始位置
  • endIndex 需要操作部分的结束位置

值得注意的是必须添加

 //让超链接的点击事件生效mBinding.ctvCheckText.movementMethod = LinkMovementMethod.getInstance()

否则点击事件就算设置了ClickableSpan 也不会生效,原理就是事件的分发。

  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面包括,后面不包括。
  • Spannable.SPAN_INCLUSIVE_INCLUSIVE:前后都包括。

最后通过setText方法将SpannableString 设置进去就能收到点击回调和查看富文本效果


总结

本文主要介绍了安卓富文本的实现方式。第一种是使用html格式的富文本,需要先创建一个html文件,然后使用WebView加载该文件以显示富文本。第二种是使用SpannableString,需要创建一个SpannableString对象,并设置需要高亮或点击的部分的起始和结束位置以及对应的点击事件。在设置完富文本后,需要将其设置到TextView或其他文本控件中以显示效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/114650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可视化(Visual) SQL初探

一、背景 在当今数字化时代&#xff0c;数据信息作为企业和组织的宝贵资源之一&#xff0c;如何挖掘其中的价值并帮助企业和组织个体决策&#xff0c;已然成为炙手可热的话题。数据分析作为其具体载体&#xff0c;是从数据中提取信息、洞察机遇、制定战略、做出决策的关键过程…

【C++面向对象】2.构造函数、析构函数

文章目录 【 1. 构造函数 】1.1 带参构造函数--传入数据1.2 无参构造函数--不传入数据1.3 实例1.4 拷贝构造函数 【 2. 析构函数 】 【 1. 构造函数 】 类的构造函数是类的一种特殊的成员函数&#xff0c;它会 在每次创建类的新对象时执行。 构造函数的名称与类的名称是完全相同…

统计学习方法 感知机

文章目录 统计学习方法 感知机模型定义学习策略学习算法原始算法对偶算法 学习算法的收敛性 统计学习方法 感知机 读李航的《统计学习方法》时&#xff0c;关于感知机的笔记。 感知机&#xff08;perceptron&#xff09;是一种二元分类的线性分类模型&#xff0c;属于判别模型…

【JAVA-Day49】Java LinkedList集合详解

Java LinkedList集合详解 摘要引言Java LinkedList集合详解一、什么是LinkedList集合1.1 链表数据结构1.2 双向链表1.3 动态大小1.4 插入和删除元素1.5 适用场景 二、LinkedList集合的使用2.1 创建 LinkedList 集合、添加元素、遍历元素2.2 在指定位置插入元素2.3 获取指定位置…

Maven的详细介绍(maven的全据配置以及idea中maven的配置)

maven的理解 Maven 是一个强大的项目管理和构建自动化工具&#xff0c;它通过抽象的项目对象模型(POM&#xff1a;Project Object Model)和构建生命周期模型(Project Lifecycle)来对项目及其构建过程进行管理(Dependency Management System)&#xff0c;Maven 最大化的消除了构…

【TensorFlow1.X】系列学习笔记【入门二】

【TensorFlow1.X】系列学习笔记【入门二】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【入门二】前言神经网络的参数神经网络的搭建前向传播反向传播 总结 前言 学习了张量、…

SpringBoot 第一个接口编写

RestController //表示该类为请求处理类public class HttpDeal {RequestMapping("/login")//这个方法处理哪一个地址过来的请求public String hello(){return "返回给浏览器";}}

测试Android webview 加载本地html

最近开发一个需要未联网功能的App, 不熟悉使用Java原生开发界面&#xff0c;于是想使用本地H5做界面&#xff0c;本文测试了使用本地html加载远程数据。直接上代码&#xff1a; MainActivity.java package com.alex.webviewlocal;import androidx.appcompat.app.AppCompatAct…

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题

DataGridView的下拉DataGridViewComboBoxColumn的数据绑定问题 需求&#xff1a;左边这列固定x行&#xff0c;右边显示下拉&#xff0c;并且赋上默认值 public void Set(){// 添加需要固定显示的行数dataGridView1.Rows.Add("早班";dataGridView1.Rows.Add("中…

小团队之间有哪些好用免费的多人协同办公软件

在小团队协作中&#xff0c;选择适合的多人协同办公软件是提高工作效率和团队协作的重要一环。幸运的是&#xff0c;市场上有许多大多数功能都免费的多人协同办公软件&#xff0c;为小团队提供了强大的协作功能和便捷的工作环境。 在本文中&#xff0c;我将根据自己多年的在线…

[C++] C++入门

☃️个人主页&#xff1a;fighting小泽 &#x1f338;作者简介&#xff1a;目前正在学习C和Linux &#x1f33c;博客专栏&#xff1a;C入门 &#x1f3f5;️欢迎关注&#xff1a;评论&#x1f44a;&#x1f3fb;点赞&#x1f44d;&#x1f3fb;留言&#x1f4aa;&#x1f3fb; …

Cesium Vue(六)— 材质(Material)

1. 设置entity材质 添加棋盘纹理材质 // 棋盘纹理 let material new Cesium.CheckerboardMaterialProperty({ evenColor: Cesium.Color.RED, oddColor: Cesium.Color.YELLOW, repeat: new Cesium.Cartesian2(2, 2), });添加条纹纹理材质 // 条纹纹理 let material new Cesium…

Java利用反射和读取xml实现迷你容器

由于需要框架能实现多态&#xff0c;达到控制反转解耦。所以容器还是需要的&#xff0c;容器的存在可以简化对象获取工作&#xff0c;但是容器也不是万能的。合理使用即可&#xff0c;Spring对我来说太庞大了&#xff0c;用不着&#xff0c;为此给框架写一个迷你版容器。 容器…

Qt中Json的操作

在 Json的两种格式中介绍了Json的格式以及应用场景。由于这种数据格式与语言无关,下面介绍一下Json在Qt中的使用。 从Qt 5.0开始提供了对Json的支持,我们可以直接使用Qt提供的Json类进行数据的组织和解析。相关的类常用的主要有四个,具体如下: Json类介绍 QJsonDocument |…

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅰ—— 生成 CSR

目录 替换拓扑图证书关系示意图说明 & 关联博文 1. 默认证书截图2. 使用certificate-manager生成CSR2.1 创建存放CSR的目录2.2 记录PNID和IP2.3 生成CSR2.4 验证CSR 参考资料 替换拓扑图 证书关系示意图 默认情况下&#xff0c;VMCA 与 Machine SSL的关系是 本系列博文要…

UE5--物体卡片与材质入门

参考资料&#xff1a; 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档&#xff1a;https://docs.unrealengine.com/5.2/zh-CN/ 前言&#xff1a; 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房&#xff0c;把学习过程与学习到的东西归纳总结起来。 …

【网络协议】聊聊网关 NAT机制

再宿舍的时候&#xff0c;其实只能通过局域网进行处理&#xff0c;但是如果接入互联网&#xff0c;一般是配置路由器当然还有网关。 MAC头和IP头的细节 一旦配置了IP地址和网关&#xff0c;就可以制定目标地址进行访问。 MAC头主要信息目标和源MAC地址&#xff0c;以及协议类…

【试题040】多个逻辑或例题2

1.题目&#xff1a;设int n0;&#xff0c;执行表达式n ||(n-1) ||(n0)||(n1)||(n2)后n的值是 &#xff1f; 2.代码解析&#xff1a; 逻辑或 || 运算符是一个短路运算符&#xff0c;它从左到右依次计算表达式&#xff0c;如果遇到一个为真&#xff08;非零&#xff09;的值&am…

uCOSIII实时操作系统 十 事件标志组

目录 事件标志组&#xff1a; 事件标志组API函数&#xff1a; 创建事件标志组&#xff1a; 等待事件标志组&#xff1a; 向事件标志组发送标志&#xff1a; 事件标志组实验&#xff1a; 事件标志组&#xff1a; 有时候一个任务可能需要和多个事件同步这个时候就需要使用事…

39.克鲁斯卡尔(Kruskal)算法

一言 已知n个顶点&#xff0c;选n-1条最短的边&#xff0c;不可成环。 概述 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法是用来求加权连通图的最小生成树的算法。其基本思想是按照权值从小到大的顺序选择n-1条边&#xff0c;保证这n-1条边不构成回路。 这就要求要首先构…