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

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

  • 前言
  • 一、富文本是什么?
  • 二、实现方法
    • 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.rhkb.cn/news/168788.html

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

相关文章

软件测试(概念篇)

前言 从这篇博客开始&#xff0c;我们将开始正式学习测试&#xff0c;在开始第一次软件测试之前&#xff0c;我们需要先了解软件测试的一些基本概念。 这些基本概念将帮助我们更加明确工作的目标&#xff0c;以便于更快的融入到测试团队中去   在这里我们将回答以下问题&…

vue v-for

目录 前言&#xff1a;Vue.js 中的 v-for 指令 详解&#xff1a;v-for 指令的基本概念 用法&#xff1a;v-for 指令的实际应用 1. 列表渲染 2. 动态组件 3. 表单选项 4. 嵌套循环 5. 键值对遍历 解析&#xff1a;v-for 指令的优势和局限性 优势&#xff1a; 局限性&a…

希捷推出Exos系列24TB硬盘:配备增强型缓存 性能提高三倍

希捷推出了全新的Exos 24TB硬盘。其基于传统的CMR构建&#xff0c;为3.5英寸规格&#xff0c;转速为7200 RPM。 同时&#xff0c;Exos系列24TB硬盘拥有10片磁盘&#xff0c;每片磁盘的容量为2.4TB&#xff0c;是希捷存储密度最高的硬盘&#xff0c;适用于超大规模企业和数据中心…

s27.linux运维面试题分享

第一章 计算机基础和Linux安装 1.冯诺依曼体系结构组成部分 计算机硬件由运算器、控制器、存储器、输入设备和输出设备五大部分组成。2.Linux哲学思想(或Liunx基本原则、思想、规则) 一切都是一个文件&#xff08;包括硬件&#xff09;。小型&#xff0c;单一用途的程序。连…

贪心算法(1)--经典贪心算法

目录 一、活动安排问题 二、最优装载问题 三、分数背包问题 四、多机调度问题 一、活动安排问题 1、策略 活动安排问题&#xff1a;设有n个活动的集合E{1,2,...,n}&#xff0c;每个活动i都有一个使用该资源的起始时间和一个结束时间&#xff0c;且。如果选择了活动i则它在…

网络编程的学习初篇

网络原理初始 网络原理和网络编程[重要] 网络能够跨主机通信! 我们未来工作,很可能是成为后端开发工程师,写服务器,和客户端通信,肯定会涉及到网络. 网络初始 计算机网络的由来 ~~ 计算机网络这是计科相关专业最核心的专业课!!! 计算机是咋来的??最初是用来计算弹道导弹的轨…

Kubernetes技术与架构-Ingress Controller

Ingress Controller控制器是实现Ingress对象的定义的组件&#xff0c;也即网关&#xff0c;负责Kubernetes集群内流量的分发&#xff0c;Kubernetes可以运行多个Ingress Controller控制器实例&#xff0c;不同的Ingress定义可以使用不同的Ingress Controller控制器实现&#xf…

搞个微信小程序002:个人信息

新建一个用于&#xff0c;和001中一样&#xff0c;然后&#xff0c;就改掉两个文件&#xff1a; index.wxml: <view><!-- 头像区域 --><view class"top"><view class"user-img"><image src"/images/tx.png"><…

PostgreSQL 插件 CREATE EXTENSION 原理

PostgreSQL 提供了丰富的数据库内核编程接口&#xff0c;允许开发者在不修改任何 Postgres 核心代码的情况下以插件的形式将自己的代码融入内核&#xff0c;扩展数据库功能。本文探究了 PostgreSQL 插件的一般源码组成&#xff0c;梳理插件的源码内容和实现方式&#xff1b;并介…

mybatis写sql

批量查询 <select id"getPreIds" resultType"java.lang.String"parameterType"java.util.List">SELECT pre_batch_id FROM public.mine_data_quality_check_record WHERE deleted0<if test"list ! null">AND pre_batch…

codeshell安装配置

codeshell安装配置 1 注意事项1.1 Python版本问题 2 codeshell环境搭建2.1 codeshell使用软件各版本2.2 软件下载2.3 codeshell使用环境安装2.3.1 python-3.10.9-amd64.exe安装2.3.2 Anaconda3-2022.10-Windows-x86_64.exe安装2.3.3 创建环境2.3.4 Pytorch安装2.3.5 transforme…

C++初阶 入门(2)

目录 一、缺省函数 1.1什么是缺省函数 1.2为什么要有缺省函数 1.3使用缺省函数 1.4测试代码 二、函数重载 2.1什么是函数重载 2.2为什么要有函数重载 2.3什么情况构成函数重载 2.4函数重载例子及代码 三、引用 3.1什么是引用 3.2如何引用 ​3.3常引用(可略过) 3…

CCF CSP认证历年题目自练Day38

题目 试题编号&#xff1a; 201409-3 试题名称&#xff1a; 字符串匹配 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   给出一个字符串和多行文字&#xff0c;在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感…

酒类商城小程序怎么做

随着互联网的快速发展&#xff0c;线上购物越来越普及。酒类商品也慢慢转向线上销售&#xff0c;如何搭建一个属于自己的酒类小程序商城呢&#xff1f;下面就让我们一起来看看吧&#xff01; 一、登录乔拓云平台 首先&#xff0c;我们需要进入乔拓云平台的后台&#xff0c;点击…

《向量数据库》——Zilliz X Dify.AI ,快速打造知识库 AI 应用

Zilliz 大模型生态矩阵再迎新伙伴!近日,Zilliz 和 Dify.AI 达成合作,Zilliz 旗下的产品 Zilliz Cloud、Milvus 与开源 LLMOps 平台 Dify 社区版进行了深度集成。 01. Zilliz Cloud v.s. Dify Dify 作为开源的 LLMs App 技术栈,在此前已支持丰富多元的大型语言模型的接入,…

【React Router】React Router学习笔记

React Router学习笔记 React Router1.什么是React Router?2.为什么要用React Router?3.基础3.1 路由配置3.2 路由匹配原理3.3 History3.3.1 browerHistory3.3.2 hashHistory3.3.3 createMemoryHistory3.3.4 实现示例 3.4 默认路由(IndexRoute)与IndexLink3.4.1 IndexRoute3.4…

[SQL开发笔记]WHERE子句 : 用于提取满足指定条件的记录

SELECT DISTINCT语句用户返回列表的唯一值&#xff1a;这是一个很特定的条件&#xff0c;假设我需要考虑很多中限制条件进行查询呢&#xff1f;这时我们就可以使用WHERE子句进行条件的限定 一、功能描述&#xff1a; WHERE子句用于提取满足指定条件的记录&#xff1b; 二、WH…

报错解决:libcudart.so和libprotobuf.so链接库未找到

报错解决&#xff1a;libcudart.so和libprotobuf.so链接库未找到 libcudart.so链接库未找到原因解决方法 libprotobuf.so链接库未找到原因解决方法 此博客介绍了博主在编译软件包时遇到的两个报错&#xff0c;主要是libcudart和libprotobuf两个动态链接库未找到的问题&#xff…

Nginx安装配置项目部署然后加SSL

个人操作笔记记录 第一步&#xff1a;把 nginx 的源码包nginx-1.8.0.tar.gz上传到 linux 系统 第二步&#xff1a;解压缩 tar zxvf nginx-1.8.0.tar.gz 第三步&#xff1a;进入nginx-1.8.0目录 使用 configure 命令创建一 makeFile 文件。 直接复制过去运行 ./configur…

【RocketMQ系列十二】RocketMQ集群核心概念之主从复制生产者负载均衡策略消费者负载均衡策略

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精…