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

news2024/12/26 11:40:15

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

  • 前言
  • 一、富文本是什么?
  • 二、实现方法
    • 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控件:
<WebView
    android: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的起始index
            endIndex, //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.coloradmin.cn/o/1117843.html

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

相关文章

轻松实现文件按大小归类保存,高效管理你的文件库!

如果你像管理自己的财产一样管理你的文件&#xff0c;那么你一定需要一个能够轻松实现文件按大小归类保存的工具。今天&#xff0c;我要向大家介绍一款全新的文件管理软件&#xff0c;它能够将你的文件按照大小进行归类保存&#xff0c;让你的文件管理更加高效和有序&#xff0…

安装jdk1.6

安装jdk1.6 背景安装修改 参考 背景 看资料的时候&#xff0c;涉及到jdk1.6&#xff0c;我看了一下本地的jdk,有1.7、1.8、20的&#xff0c;就是没1.6的。然后就琢磨装一个 安装 我看了一下oracle官网&#xff0c;现成的好像不好用。后面google了一下&#xff0c;好像苹果提供了…

d3dx9_43.dll丢失怎么解决,四个解决方法帮你解决d3dx9_43.dll丢失

随着科技的不断发展&#xff0c;我们越来越依赖各种软件和硬件设备来提高生活和工作效率。然而&#xff0c;有时候我们可能会遇到一些技术问题&#xff0c;如“d3dx9_43.dll丢失”的问题。这个问题可能导致某些程序无法正常运行&#xff0c;给我们的生活带来诸多不便。因此&…

如何编写有效的接口测试

在所有的开发测试中&#xff0c;接口测试是必不可少的一项。有效且覆盖完整的接口测试&#xff0c;不仅能保障新功能的开发质量&#xff0c;还能让开发在修改功能逻辑的时候有回归的能力&#xff0c;同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原则&#xff1f;测…

发现一款非常好用的学术GPT,可形成知识库,并分析论文,根据观点生成文字

发现一款非常好用的学术GPT&#xff0c;支持CHATGPT3.5交互、论文分析与生成&#xff0c;目前作者并未全面推广&#xff0c;仅在小圈子里使用&#xff0c;可以保证后端api的使用稳定性&#xff0c;不会出现大量用户共享gpt 服务&#xff0c;导致gpt调用超时的情况。 使用方法&a…

unittest自动化测试框架,全网独一份

一、单元测试的定义 1、什么是单元测试&#xff1f; 单元测试是指&#xff0c;对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作&#xff0c;这里的最小可测试单元通常是指函数或者类&#xff0c;一般是开发来做的&#xff0c;按照测试阶段来分&…

笔记:绘图进阶

主要功能&#xff1a; 双坐标轴多子图共用一个横坐标横坐标时间刻度设置&#xff08;方便&#xff09; # -*- coding: utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdatesif __name__ __main__:# 风速da…

Pytest自动化测试框架之Allure报告详解

简介 Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容&#xff0c; 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看&#xff1a; Allure报告可以…

Elasticsearch实践:ELK+Kafka+Beats对日志收集平台的实现

可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个全文搜索引擎&#xff0c;它还提供了分布式的多用户能力&#xff0c;实时的分析&#xff0c;以及对复杂搜索语句的处理能力&#xff0c;使其在众多场景下&#xff0c;如企业搜索&#xff0c;日志和事件数据分析等…

基于PCA主成分分析的BP神经网络回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

医疗领域的数字化浪潮:互联网医院平台的关键作用

数字化浪潮正在迅速改变医疗领域的方式和效率。互联网医院平台作为数字化医疗的关键元素&#xff0c;正在为医疗行业带来巨大的变革。本文将探讨互联网医院平台的关键作用&#xff0c;并提供一个示例&#xff0c;使用Python编写一个简单的医疗预约系统。 互联网医院平台的关键…

C++11的for循环

在C03/98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的for循环以统一&#xff0c;简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 for循环的新用法 #include <iostre…

可视化模拟航线

目录 效果图 前言 新社区 将模拟航线引入到自己的html页面中 创建容器 初始化echarts实例对象 配置项给echarts 效果图 前言 模拟航线为echarts社区里面的大佬制作&#xff0c;由于2022.7.28&#xff0c;echarts的社区停止了&#xff0c;所以本文是为了方便直接使用&…

微信收款码提现要手续费吗

目前不管是微信商户或者支付宝商户最低费率可以达到0.2%费率&#xff1b;市面上普通个体商户或者企业商家的收款费率一般在0.6左右&#xff0c;一些使用第三方聚合支付平台的也有使用0.38的&#xff0c;总体也就是10000块钱的费率是38-60块钱&#xff0c;对于一些流水比较大的商…

I2C——笔记

使用I2C&#xff0c;可以实现多设备的数据通信&#xff0c;这些设备通过两根线连接&#xff0c;SCL和SDA。 SCL控制时钟&#xff0c;SDA控制数据。这些设备有着共同的时钟总线&#xff0c;因此I2C是同步的。 他们虽然可以相互传递数据&#xff0c;但是只有一条数据线进行数据传…

使用pytorch实现高斯混合模型分类器

本文是一个利用Pytorch构建高斯混合模型分类器的尝试。我们将从头开始构建高斯混合模型(GMM)。这样可以对高斯混合模型有一个最基本的理解&#xff0c;本文不会涉及数学&#xff0c;因为我们在以前的文章中进行过很详细的介绍。 本文将使用这些库 import torchimport numpy as…

2020年江西省职业院校技能大赛高职组“信息安全管理与评估”赛项任务书样题

2020年江西省职业院校技能大赛高职组 “信息安全管理与评估”赛项任务书 样题 赛项时间 9:00-12:00&#xff0c;共计3小时。 赛项信息 赛项内容 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 平台搭建与安全设备配置防护 任务1 网络平台搭建 9:00-12:00 1…

Python超入门(5)__迅速上手操作掌握Python

# 20.列表# 一维列表 names [Hash, Bob, Nick] print(names) # 全打印 print(names[:]) # 全打印 print(names[1:3]) # 打印1到2号索引 print(names[:2]) # 打印0到1号索引[Hash, Bob, Nick] [Hash, Bob, Nick] [Bob, Nick] [Hash, Bob]# 二维列表:一维列表中嵌套一维列表…

S4系统编辑屏幕报错 报错 RFC callback call rejected by whitelist

点击 Dialog 的布局 直接报错 经过检查&#xff0c;发现正式机和开发机在 SM59 TCP/IP链接 的 EU_SCRP_WN32不一样 把开发机的数据维护到生产机&#xff0c;就可以用了 RS_SCRP_GF_PROCESS_640RFC_GET_FUNCTION_INTERFACERS_SCRP_GF_PROCESS_640RS_SCRP_GF_RBUILDINFORS_SC…