我想让我的TextView的一部分不可见。详细地,我向用户提出了一个数学问题:
9 * 9 = 81
而且我希望81
不可见。当用户键入正确答案时,我将显示数字“ 8”,然后显示“ 1”。
我曾尝试使用透明颜色的TextAppearanceSpan
和ForegroundColorSpan
(#00000000和Color.TRANSPARENT),它们对于除KindleFire设备和仿真器之外的所有设备和仿真器都非常适用。
[在Kindle Fire上,“ 81”显示为深灰色。似乎光栅化程序试图使其在某些“暗灰色”背景下不可见,而不是在我在LinearLayout
的根Activity
中设置的背景(看起来像网格纸图像)下不可见。
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9EbVE0Mi5wbmcifQ==” alt =“在此处输入图像描述”>
我的问题是:如何既不使用TextView
也不使用TextAppearanceSpan
来使ForegroundColorSpan
中的一部分文本不可见?是否存在另一个“跨度”可以正确测量文本但不能绘制文本?
更新
[我发现存在一些神秘的RasterizerSpan
和MetricAffectingSpan
,可以(按标题判断)可以提供帮助。
正如我所看到的,RasterizerSpan的唯一含义是将Rasterizer设置为TextPaint对象:
public void updateDrawState(TextPaint ds) {
ds.setRasterizer(mRasterizer);
}
我发现这很有希望:如果我能够设置一种“空”光栅化器(什么都不做),它将使该文本不可见。不幸的是
new RasterizerSpan(null); // (set mRasterizer to null)
没有帮助。
我的另一个想法是实现一个自定义的ShaderSpan,它将设置一个“ void”着色器:
public void updateDrawState(TextPaint ds) {
ds.setShader(myCustomVoidShader);
}
但是我不明白如何创建不产生任何效果的着色器。
查看在您的updateDrawState()
上覆盖ForegroundColorSpan
并调用setXferMode()是否有效:
public class TransparentSpan extends ForegroundColorSpan {
private final PorterDuffXfermode MODE = new PorterDuffXfermode(PorterDuff.Mode.DST);
public TransparentSpan(int color) {
super(color);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setXfermode(MODE);
}
}
对不起,我没有Kindle Fire可以通过:)进行测试>
为什么不使用android可见性(true或false)。它将完成您需要的相同工作(或者使用Span会导致特定的原因)?
您可以使用AbsoluteSizeSpan,将大小设置为0。因此它将不可见