Android Spannable 使用​注意事项

news/2024/11/18 0:17:35/

1、当前示例中间的 "评论",使用SpannableStringBuilder实现,点击评论会有高亮效果加粗,但再点击其它Bar时无法恢复默认样式。

2、因为SpannableString或SpannableStringBuilder中的效果是叠加的,恢复默认样式需要先移除加粗样式 spannable.removeSpan(样式)

3、示例代码

// 样式是叠加的,所以要清除之前的样式                                                                                                  spannableStringBuilder.removeSpan(highlightSpanColor);
spannableStringBuilder.removeSpan(highlightSpanStyle);

private SpannableStringBuilder spannableStringBuilder;// 评论 默认样式// 字体颜色ForegroundColorSpan defaultSpanColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_606266,null));// 字体大小AbsoluteSizeSpan defaultSpanSize = new AbsoluteSizeSpan(DisplayUtils.dp2px(getContext(), 15));// 字体样式StyleSpan defaultSpanStyle = new StyleSpan(Typeface.NORMAL);// 评论 高亮样式// 字体颜色ForegroundColorSpan highlightSpanColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_303133,null));// 字体样式StyleSpan highlightSpanStyle = new StyleSpan(Typeface.BOLD); // 字体加粗// 评论数量 样式// 字体颜色ForegroundColorSpan countColor = new ForegroundColorSpan(getResources().getColor(com.lstm.baselibrary.R.color.color_909399, null));// 字体大小AbsoluteSizeSpan countSize = new AbsoluteSizeSpan(DisplayUtils.dp2px(getContext(), 12));/*** 不同样式拼接 默认样式*/private void splicingDefaultTextStyle() {spannableStringBuilder = new SpannableStringBuilder(getText());// 评论spannableStringBuilder.removeSpan(highlightSpanColor); // 样式是叠加的,所以要清除之前的样式spannableStringBuilder.removeSpan(highlightSpanStyle);spannableStringBuilder.setSpan(defaultSpanColor, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体颜色spannableStringBuilder.setSpan(defaultSpanSize, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体大小spannableStringBuilder.setSpan(defaultSpanStyle, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体样式// 评论数量spannableStringBuilder.setSpan(countColor, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体颜色spannableStringBuilder.setSpan(countSize, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体大小spannableStringBuilder.setSpan(defaultSpanStyle, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体样式setText(spannableStringBuilder);}/*** 不同样式拼接 高亮样式*/private void splicingHighlightTextStyle() {spannableStringBuilder = new SpannableStringBuilder(getText());// 评论spannableStringBuilder.removeSpan(defaultSpanColor); // 样式是叠加的,所以要清除之前的样式spannableStringBuilder.removeSpan(defaultSpanStyle);spannableStringBuilder.setSpan(highlightSpanColor, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体颜色spannableStringBuilder.setSpan(defaultSpanSize, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体大小spannableStringBuilder.setSpan(highlightSpanStyle, 0, 2, Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体样式// 评论数量spannableStringBuilder.setSpan(countColor, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体颜色spannableStringBuilder.setSpan(countSize, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体大小spannableStringBuilder.setSpan(defaultSpanStyle, 2, getText().length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE); // 字体样式setText(spannableStringBuilder);}


http://www.ppmy.cn/news/1234352.html

相关文章

【LeetCode二叉树进阶题目】606,102,107

二叉树进阶题目 606. 根据二叉树创建字符串解题思路及实现 102. 二叉树的层序遍历解题思路及实现 107. 二叉树的层序遍历 II解题思路及实现 606. 根据二叉树创建字符串 描述 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号…

[论文笔记] Scaling Laws for Neural Language Models

概览: 一、总结 计算量、数据集大小、模型参数量大小的幂律 与 训练损失呈现 线性关系。 三个参数同时放大时,如何得到最佳的性能? 更大的模型 需要 更少的样本 就能达到相同的效果。 </

BW4HANA 从头到脚 概念详解 ---- 持续更新中

1. 理解BW4HANA是干嘛的 好歹干了这么久的活了&#xff0c;从当初的啥也不懂到现在感觉啥都知道点&#xff0c;虽然知道的有限&#xff0c;但是也不是小白。渐渐的也知道了SAP开发的一些逻辑。本来咱是想当个BW的大牛的。但是现在感觉这条船要沉了是怎么回事。个人才稍微摸到点…

VS Code 如何搭建C/C++环境

目录 一、VS Code是什么&#xff1f; 二、VS Code下载和安装 2.1下载 2.2安装 2.3环境介绍 三、Vs Code配置C/C环境 3.1下载和配置MinGW-w64编译器套件 3.1.1下载 3.1.2配置 一、VS Code是什么&#xff1f; 跨平台&#xff0c;免费且开源的现代轻量级代码编辑器 Vis…

如何用java的虚拟线程连接数据库

我觉得这个很简单 首先确保你idea支持jdk21. 然后把idea编译成的目标字节码设置为21版本的 然后编写代码。 创建虚拟线程的方式有&#xff1a; Runnable runnable () -> {System.out.println("Hello, world!"); };// 创建虚拟线程 Thread virtualThread Thre…

优化记录 -- 记一次搜索引擎(SOLR)优化

业务场景 某服务根据用户相关信息&#xff0c;使用搜索引擎进行数据检索 软件配置 solr 1台&#xff1a;32c 64g 数据10gb左右&#xff0c;版本 7.5.5 应用服务器1台&#xff1a;16c 64g 应用程序 3节点 问题产生现象 1、因业务系统因处理能不足&#xff0c;对业务系统硬件…

在AWS VPC中运行Nagios检查时指定自定义DNS解析器的选项

在AWS VPC中运行Nagios检查&#xff0c;并希望能够指定自定义DNS解析器来处理请求。我想使用Python requests库来实现这个目标。 根据问题描述&#xff0c;您想在AWS VPC中运行Nagios检查&#xff0c;并希望使用Python的requests库来指定自定义DNS解析器。 要解决这个问题&…

前缀和——DP35 【模板】二维前缀和

文章目录 &#x1f34e;1. 题目&#x1f352;2. 算法原理&#x1f345;3. 代码实现 &#x1f34e;1. 题目 题目链接&#xff1a;【模板】二维前缀和_牛客题霸_牛客网 (nowcoder.com) 描述 给你一个 n 行 m 列的矩阵 A &#xff0c;下标从1开始。 接下来有 q 次查询&#xff0…