[Android TextView使Kindle Fire上的隐形范围

问题描述 投票:0回答:3

我想让我的TextView的一部分不可见。详细地,我向用户提出了一个数学问题:

9 * 9 = 81

而且我希望81不可见。当用户键入正确答案时,我将显示数字“ 8”,然后显示“ 1”。

我曾尝试使用透明颜色的TextAppearanceSpanForegroundColorSpan#00000000Color.TRANSPARENT),它们对于除KindleFire设备和仿真器之外的所有设备和仿真器都非常适用。

[在Kindle Fire上,“ 81”显示为深灰色。似乎光栅化程序试图使其在某些“暗灰色”背景下不可见,而不是在我在LinearLayout的根Activity中设置的背景(看起来像网格纸图像)下不可见。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9EbVE0Mi5wbmcifQ==” alt =“在此处输入图像描述”>

我的问题是:如何既不使用TextView也不使用TextAppearanceSpan来使ForegroundColorSpan中的一部分文本不可见?是否存在另一个“跨度”可以正确测量文本但不能绘制文本?

更新

[我发现存在一些神秘的RasterizerSpanMetricAffectingSpan,可以(按标题判断)可以提供帮助。

正如我所看到的,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);
}

但是我不明白如何创建不产生任何效果的着色器。

android android-emulator invisible kindle-fire spannablestring
3个回答
3
投票

查看在您的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可以通过:)进行测试>


0
投票

为什么不使用android可见性(true或false)。它将完成您需要的相同工作(或者使用Span会导致特定的原因)?


0
投票

您可以使用AbsoluteSizeSpan,将大小设置为0。因此它将不可见

© www.soinside.com 2019 - 2024. All rights reserved.