Android UI开发之多样式富文本的简洁实现

news2025/3/1 1:03:07

多样式富文本的简洁实现

原文链接:Android UI开发之多样式富文本的简洁实现

AppendableStyleString 允许你快速构建多种样式文字。

AppendableStyleString.jpg

特性

  • 支持对于同一个字符串设置多种样式。
  • 支持文字和图片。
  • 提供默认样式。
  • 采用 DSL 确保更清晰的样式作用范围

快速开始

下面的示例为你展示了如何创建一条链接文本。

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(url = "https://www.baidu.com/")) {
            append("这是一个链接")
        }
    }

下面的示例为你展示了如果创建一条图片文本。

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withImage(ImageSpan(this@DateActivity, R.mipmap.ic_launcher))
    }

拼接字符串

下面的示例为你展示如何创建一条复杂的富文本字符串。

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(url = "https://www.baidu.com/")) {
            append("这是一个链接")
        }
        withStyle(AppendableStyle(strikeMode = StrikeMode.UNDERLINE)) {
            append("这是一个带下划线的句子")
        }
        withStyle(AppendableStyle(backColor = R.color.md_theme_primary)) {
            append("这是带颜色的文字")
        }
        withStyle(
            AppendableStyle(scriptMode = ScriptMode.Superscript, foreColor = R.color.md_theme_tertiaryFixedDim)
        ) {
            append("[1]")
        }
        withImage(ImageSpan(this@DateActivity, R.mipmap.ic_launcher))
    }
AppendableStyleString.jpg

通用样式

通过指定 AppendableStyle 内的 backColor 属性,可以为字符串设置背景色。目前 AppendableStyle 允许你指定以下属性:

  • foreColor : 文字颜色。
  • backColor : 文字背景色。
  • fontStyle : 文字风格,目前支持粗体、斜体或者正常。
  • fontFamily : 文字字体。
  • fontSize : 文字大小。
  • fontAlign : 文字对齐方式。
  • proportion : 文字放大比例,例如如果放大 50% ,则该属性设置为 1.5f 。
  • xProportion : 值 > 1.0 会将文本拉伸得更宽。值 < 1.0 会将文本拉伸得更窄。
AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(
            url = "https://www.baidu.com/", backColor = R.color.lightslategray
        )) {
            append("这是一个链接")
        }
    }
AppendableStyleString_url_bkcolor.jpg

特殊样式

除了通用样式,你也可以为文字指定以下唯一的特殊样式,目前支持:

链接文字

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(url = "https://www.baidu.com/")) {
            append("这是一个链接")
        }
    }
AppendableStyleString_url.jpg

首行缩进

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(linesIndent = LeadingMarginSpan.Standard(100, 0))) {
            append("这是一段带首行缩进的文本哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈。")
        }
    }
AppendableStyleString_linesIndent.jpg

携带子弹点

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(
            AppendableStyle(bulletSpan = BulletSpan(10, ColorUtils.colorHex2Int("#d63031"), 10))
        ) {
            append("这是一段带子弹点的文字。")
        }
    }
AppendableStyleString_bullet.jpg

删除线或者下划线

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(
            AppendableStyle(strikeMode = StrikeMode.STRIKETHROUGH)
        ) {
            append("这是一段带删除线的文字。")
        }
        withStyle(
            AppendableStyle(strikeMode = StrikeMode.UNDERLINE)
        ) {
            append("这是一段带下划线的文字。")
        }
    }
AppendableStyleString_strike.jpg

上标或者下标

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle { append("这是一段带上标的文字。") }
        withStyle(AppendableStyle(scriptMode = ScriptMode.Superscript)) {
            append("[1]")
        }
    }
AppendableStyleString_script.jpg

范围模糊

AppendableStyleString
    .getStyleScope(getBinding().tv) {
        withStyle(AppendableStyle(
            blurRadius = 5f, 
            blur = BlurMaskFilter.Blur.NORMAL)
        ) {
            append("这是一段带模糊的文字。")
        }
    }
AppendableStyleString_blur.jpg

可点击文字

该项不提供示例。

源代码

你可以点击 AppendableStyleString 来查看源码,这个仓库也包含了我封装的其他工具,如果你喜欢的话,还希望能够star,fork和提出issue。😀😀😀

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

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

相关文章

【事务失效】十种常见场景

前提 大多数Spring Boot项目只需要在方法上标记Transactional注解&#xff0c;即可一键开启方法的事务性配置。 但是&#xff0c;事务如果没有被正确出&#xff0c;很有可能会导致事务的失效&#xff0c;避免因为事务处理不当导致业务逻辑产生大量偶发性BUG 事务的传播类型 …

JDK8-17的特性发生了哪些变化

JDK8-17的特性发生了哪些变化 垃圾回收器Java交互式编程接口定义扩展String底层结构变更of 创建不可变序列HTTP 2 协议接口引入 var 关键字字符串增强lambda 表达式类型推导switch 增强支持文本块定义instanceof 模式匹配引入record 关键字新增密封类的定义switch二度加强模块…

栈及其实现

目录 一&#xff1a;栈 1.栈的概念和结构 2.栈的实现 <1>.初始化栈 <2>.入栈 <3>.出栈 <4>:获取栈顶元素 <5>.获取栈中有效元素个数 <6>.销毁栈 <7>.示例 二&#xff1a;栈的完整代码 一&#xff1a;栈 1.栈的概念和结构 …

Origin中log2的计算,设置以2为底的log坐标

使用高中的换底公式即可&#xff0c;把2的底换成10的底计算 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5747fdbd2b5c43f095d716092fd17124.png

模式介绍和基本管理

模式介绍&#xff1a; 用户的模式(SCHEMA&#xff09;指的是用户账号拥有的对象集&#xff0c;在概念上可将其看作是包含表、 视图、索引和权限定义的对象。在 DM 中&#xff0c;一个用户可以创建多个模式&#xff0c;一个模式中的对象 &#xff08;表、视图等&#xff09;可以…

【深度学习】- 作业2: MNIST手写数字识别

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

stata软件基本操作

一、stata软件介绍 Stata是一个用于分析和管理数据的功能强大又小巧玲珑的实用统计分析软件&#xff0c;由美国计算机资源中心&#xff08;Computer Resource Center&#xff09;研制。它同时具有数据管理软件、统计分析软件、绘图软件、矩阵计算软件和程序语言的特点&#xf…

二叉树的相关知识

1.树概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。 有一个特殊的结点&#…

Typora Mac版本安装 Pandoc 导出文件为word格式(windows可通用)

今天在和一位商务小伙伴对接的时候&#xff0c;需要提供一份 word 版本的初稿。对于习惯了使用 支持 markdown 语法的 typora 来说&#xff0c;复制粘贴到 word 是不可能的。 可以通过 “导出” 功能&#xff0c;选择将当前文件导出为 “word” 格式&#xff0c;这个过程有个小…

通过CSS实现炫酷效果,让你的网页不再平淡无奇

通过CSS实现炫酷效果&#xff0c;让你的网页不再平淡无奇 (一)CSS基础1.1CSS介绍1.2CSS样式1.3CSS 格式 &#xff08;二&#xff09;CSS 选择器2.1标签选择器2.2类选择器2.3层级选择器2.4id选择器2.5组选择器2.6伪类选择器2.7通配符选择器 &#xff08;三&#xff09;样式表引入…

【自然语言处理】 - 作业3: 文本情感分析

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

C++的继承

继承 1.继承的概念及定义1.1继承的概念1.2 继承定义1.2.1定义格式1.2.2继承关系和访问限定符1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6. 继承与静态成员7.复杂的菱形继承及菱形虚拟继承 1.继承的概念及…

舒适交友 - 什么样的婚姻最舒服 稳态婚姻

人人都是心理学家,mbti等_个人渣记录仅为自己搜索用的博客-CSDN博客 人生两大目标: 生产力提升 让身边的人快乐. 激动 兴奋 不一定 舒适 开心 幸福 安全感 平静 宁静 祥和 婚姻 稳态 041 探秘“情绪”——如何确定只有六种基本情绪&#xff1f; - 知乎 ( 6种原始情绪&am…

chatgpt赋能Python-python_dilate

Python中的dilate操作&#xff1a;了解该操作及其应用 在计算机视觉领域&#xff0c;dilate操作是一种常用的图像处理技术。在Python中&#xff0c;我们可以使用OpenCV库来实现dilate操作。本文将介绍dilate操作的基本概念&#xff0c;讨论其应用及如何使用Python进行实现。 …

C++爱好者的自我修养(13.1):一维数组——简介,声明,初始化(赋值)

文章目录 1.什么是数组&#xff1f;2.数组的声明2.1格式2.2特别注意&#xff1a;有效下标值的重要性 3.数组的初始化&#xff08;赋值&#xff09;3.1格式3.2 C11新增的初始化方法规则功能3.2.1 等号的省略3.2.2 当大括号内无东西3.2.3 禁止缩窄转换 1.什么是数组&#xff1f; …

Kafka实时数据同步

目录 1 概述 2 捕获Oracle数据到Kafka 2.1 数据捕获设置 2.2 数据发布任务设置 2.3 捕获到发布数据流映射 2.4 查看任务执行日志 3 订阅Kafka数据到ClickHouse 3.1 数据订阅设置 3.2 数据加载设置 3.3 订阅到加载数据流映射 3.4 查看任务执行日志 4 校验数据一致性 …

GEE:GEDI数据提取值到矢量区域和点

作者:CSDN @ _养乐多_ 本文将介绍GEDI数据集从GEE上下载到本地,并将每一个激光点的值提取为一个矢量区域,并提取值到矢量区域的方法。 文章目录 一、GEDI数据下载二、GEDI数据栅格矢量化三、提取值到区域四、提取栅格值到点五、空间插值一、GEDI数据下载 GEDI数据下载链接:…

80个Python练手小项目;AI开发者的总结与反思;B站免费Stable Diffusion视频教程;五问ChatGPT+医学影像 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『美团大模型已秘密研发数月』在仅剩一年的窗口期里努力奔跑 5月18日下午&#xff0c;美团内部召开大模型技术分享会&#xff0c;美团…

【深度学习】- 作业5: Didi交通场景-车辆预测

课程链接: 清华大学驭风计划 代码仓库&#xff1a;Victor94-king/MachineLearning: MachineLearning basic introduction (github.com) 驭风计划是由清华大学老师教授的&#xff0c;其分为四门课&#xff0c;包括: 机器学习(张敏教授) &#xff0c; 深度学习(胡晓林教授), 计算…

ONVIF协议了解

第一部分:ONVIF理论基础 一&#xff0e; 为什么要用ONVIF协议&#xff1a; IPC厂商主流的遵循的是RTSP协议进行推流&#xff0c;那么RTSP最重要的就是RTSP的URL地址。但是各个厂商的URL地址格式都不一样&#xff0c;所以就诞生了一个标注协议—ONVIF。ONVIF协议的出现&#x…