android TextView在Kindle Fire上打造隐形跨度
我想让TextView的一部分不可见。具体而言,我向用户提出了一个数学问题:android TextView在Kindle Fire上打造隐形跨度,android,android-emulator,invisible,kindle-fire,spannablestring,Android,Android Emulator,Invisible,Kindle Fire,Spannablestring,我想让TextView的一部分不可见。具体而言,我向用户提出了一个数学问题: 9*9=81 我希望81不可见。当用户键入正确答案时,我会先显示数字“8”,然后显示数字“1” 我尝试使用透明颜色的TextAppearanceSpan和ForegroundColorSpan(都是#00000000和color.transparent),它们适用于除KindleFire设备和仿真器之外的所有设备和仿真器 在KindleFire上,“81”显示为深灰色。光栅化器似乎试图使其在某种“暗灰色”背景下不可见,
9*9=81
我希望81
不可见。当用户键入正确答案时,我会先显示数字“8”,然后显示数字“1”
我尝试使用透明颜色的TextAppearanceSpan
和ForegroundColorSpan
(都是#00000000和color.transparent),它们适用于除KindleFire设备和仿真器之外的所有设备和仿真器
在KindleFire上,“81”显示为深灰色。光栅化器似乎试图使其在某种“暗灰色”背景下不可见,而不是在我在活动的根线性布局中设置的背景(看起来像网格纸图像)
我的问题是:如何既不使用textpearancespan
也不使用ForegroundColorSpan
使TextView
中的部分文本不可见?是否存在另一个“跨度”可以正确测量文本,但不能绘制文本
更新
我发现存在一些神秘的光栅span
和MetricAffectingSpan
,这可能(从标题判断)有所帮助
如我所见,光栅化器span的唯一含义是为TextPaint对象设置光栅化器:
public void updateDrawState(TextPaint ds) {
ds.setRasterizer(mRasterizer);
}
我发现它很有希望:如果我能够设置一种“void”光栅化器(它什么也不做),它将使文本不可见。不幸的是
new RasterizerSpan(null); // (set mRasterizer to null)
没有帮助
我的另一个想法是实现一个自定义着色器span,它将设置一个“void”着色器:
但我不知道如何创建一个“不产生任何结果”的着色器。请查看在您的ForegroundColorSpan上重写updateDrawState()
和调用是否有效:
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可供测试:)查看在您的ForegroundColorSpan上覆盖updateDrawState()
,调用是否有效:
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);
}
}
抱歉,我没有KindleFire可供测试:)为什么不使用android可见性(正确或错误)。它将完成与您需要的相同的工作(或者有一个特定的原因让您撒谎以使用Span)?为什么不使用android可见性(正确或错误)。它将完成与您所需的相同的工作(或者您可能会说谎以使用Span)?您可以使用AbsoluteSizeSpan,将大小设置为0。所以它将是隐形的
span=新的绝对尺寸span(0,真);
spannableString.setSpan(span,wordPosition.start,wordPosition.end,span.span_EXCLUSIVE_EXCLUSIVE)
注意:
不可见单词的下一个单词将出现在不可见单词的位置。您可以使用AbsoluteSizeSpan,将大小设置为0。所以它将是隐形的
span=新的绝对尺寸span(0,真);
spannableString.setSpan(span,wordPosition.start,wordPosition.end,span.span_EXCLUSIVE_EXCLUSIVE)
注意:
不可见单词的下一个单词将出现在不可见单词的位置。如果将整个TextViews TextColor设置为透明,kindle fire上会发生什么情况?extend ForegroundColorSpan&override updateDrawState&不要调用super方法>如果将整个TextViews TextColor设置为透明,kindle fire上会发生什么?它工作正常(它是不可见的)。2Satya:super的方法是ds.setColor(mColor)。如果我不调用它,颜色将保持不变(=黑色)。它将不透明。如果将整个TextViews TextColor设置为透明,kindle fire上会发生什么?扩展ForegroundColorSpan并覆盖updateDrawState&不要调用super方法,在该>中,如果将整个TextViews TextColor设置为透明,kindle fire上会发生什么?它工作正常(不可见)。2Satya:super的方法是ds.setColor(mColor).如果我不叫它,颜色保持不变(=黑色)。它将不透明。