问题标签 [android-spannable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
28 浏览

android - 如何在两个 Spannable 之间添加水平间距?

我有一个自定义 TextView,它结合了两段文本并有一个间距变量。

每一个都有自己的风格,并被连接起来。例子:

  • 标签->“名称:”
  • 价值->“约翰”

最终导致“姓名:约翰”

我想spacingBetweenLabelAndValue在这两个字符串之间添加一个额外的间距 ( )。

有没有办法使用 Spannable 做到这一点?

0 投票
0 回答
111 浏览

android - 为 textColor edittext 禁用暗模式

禁用了应用程序的暗模式

但是在输入的情况下,当你需要移除 Span 时,textСolor 被重置为白色,变得不可见。

示例:文本:可编辑?开始:诠释

例如,如果您将样式 textColorPrimary 更改为红色,则颜色不会改变。但是如果你把它往暗的方向做,那么这个颜色就会变成浅红色。

0 投票
1 回答
89 浏览

android - ReplacementSpan - 跨行的“筹码”

我正在使用自定义替换跨度在特定单词周围绘制背景(在单词周围添加填充,单词由周围的符号标识,很像 HTML 标记),甚至更改这些单词的文本大小(尽管我m 在这种情况下不这样做)。当只有一行时,这工作得很好,一切都按预期显示:

chip_that_works_right

这是通过调整覆盖中的 FontMetrics 来完成的getSize,调整顶部和底部以添加背景填充,并调整返回的大小(宽度)以添加相同的内容,如下所示:

onDraw将矩形和文本绘制到画布上的句柄。

问题来自多行文本。我知道 ReplacementSpan 的内容不会包装/拆分,整个 ReplacementSpan 将被包装,在这种情况下这是预期和想要的。当我们进入多行时,问题似乎在于芯片内的文本定位。根据 getSize() 的字体度量,我得到了一些顶部/底部的奇数值,它们的大小与预期的不同。在第一行,文字显示在芯片底部,第二行文字显示在芯片顶部:

断开的多行

在我看来,当有多行时,没有调整行高来处理额外的填充。我尝试在我的 ReplacementSpan 中实现 LineHeightSpan,但这不起作用,因为它必须应用于整个段落。

我最接近让它工作的是使用明确的高度应用 LineHeightSpan:

但这不是一个真正的解决方案,因为它不会根据 ReplacementSpan 的高度进行调整。而且它似乎有点偏离(框似乎比它们应该的高一点,并且文本似乎有点靠近底部,而不是居中):

几乎但不完全

除了为每个单词创建一个单独的视图并将它们插入到类似FlexboxLayout 之类的东西之外,有什么方法可以让它正常工作?


更新:我按照 Zain 建议的文章和 repo 尝试了 Zain 建议的方法,但它也不起作用。

首先,水平填充不会影响“单词”的宽度。如果你在两个相邻的单词上放一个芯片,填充就会重叠。其次,垂直填充实际上并没有改变行高。如果填充超出行高或相邻行上的芯片,添加垂直填充会将背景重叠到其他行上。文本视图之外的任何填充(例如,第一行上方,最后一行下方)都会被截断。

0 投票
0 回答
27 浏览

android - 安卓。SpannableString 的单元测试

为了测试我的业务逻辑,我正在使用 mockk 库。但我也有一些辅助类,其中包含使用 SpannableString、ForegroundColorSpan 等的方法。我还需要为这些方法编写测试。但是,我不太了解如何正确编写此类测试,因为在此之前我只为业务逻辑编写测试。我可以编写使用 mockk 测试 SpannableString 测试吗?不幸的是,我还没有找到任何好的例子来演示如何编写这样的测试。请帮我。这是我需要编写测试的代码示例:

0 投票
1 回答
40 浏览

android - 无法将跨度应用于单词中的第一个字母

我正在制作一个动画,其中涉及将 OutlineSpan 设置为 word 中的单个字母。但是,当我将 OutlineSpan 应用于第一个字母时,它没有反映

当我尝试应用另一个跨度时,它正在工作,但不是轮廓跨度。代码大纲范围https://gist.github.com/santaevpavel/61eb23092bdb8a926aeb8302ec95b4b6