【发布时间】:2012-09-25 10:35:01
【问题描述】:
我想让我的 TextView 的一部分不可见。详细来说,我向用户提出一道数学题:
9 * 9 = 81
我希望81 不可见。当用户输入正确答案时,我会显示数字“8”,然后显示“1”。
我尝试使用带有透明颜色的 TextAppearanceSpan 和 ForegroundColorSpan(#00000000 和 Color.TRANSPARENT),它们可以完美地适用于所有设备和模拟器,除了KindleFire 设备和模拟器。
在 Kindle Fire 上,“81”显示为深灰色。似乎光栅化器试图使其在某些“深灰色”背景下不可见,而不是在我在Activity 的根LinearLayout 中设置的背景(看起来像网格纸图像)。
我的问题是:如何既不使用 TextAppearanceSpan 也不使用 ForegroundColorSpan 使 TextView 中的一部分文本不可见?是否存在另一个正确测量文本但不绘制文本的“跨度”?
更新
我发现存在一些神秘的RasterizerSpan 和MetricAffectingSpan,这可以(从标题判断)有所帮助。
如我所见,RasterizerSpan 的唯一含义是为 TextPaint 对象设置一个 Rasterizer:
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);
}
但我不明白如何创建一个产生“无”的着色器。
【问题讨论】:
-
如果将整个 TextViews TextColor 设置为透明,kindle fire 会发生什么?
-
扩展 ForegroundColorSpan 并覆盖 updateDrawState 并且不要在其中调用超级方法
-
>如果将整个 TextViews TextColor 设置为透明,kindle fire 会发生什么情况,它可以正常工作(它是不可见的)。
-
2Satya: super 的方法是 ds.setColor(mColor)。如果我不调用它,颜色保持不变(=黑色)。它不会是透明的。
标签: android android-emulator invisible kindle-fire spannablestring