【问题标题】:android TextView make invisible span on Kindle Fireandroid TextView在Kindle Fire上制作隐形跨度
【发布时间】:2012-09-25 10:35:01
【问题描述】:

我想让我的 TextView 的一部分不可见。详细来说,我向用户提出一道数学题:

9 * 9 = 81

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

我尝试使用带有透明颜色的 TextAppearanceSpanForegroundColorSpan#00000000Color.TRANSPARENT),它们可以完美地适用于所有设备和模拟器,除了KindleFire 设备和模拟器。

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

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

更新

我发现存在一些神秘的RasterizerSpanMetricAffectingSpan,这可以(从标题判断)有所帮助。

如我所见,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


【解决方案1】:

查看在您的ForegroundColorSpan 上覆盖updateDrawState() 并调用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 :)

【讨论】:

    【解决方案2】:

    你可以使用AbsoluteSizeSpan,设置大小为0。所以它会不可见

    span = new AbsoluteSizeSpan(0, true); spannableString.setSpan(span, wordPosition.start, wordPosition.end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    注意: 隐形单词的下一个单词会出现在隐形单词的位置。

    【讨论】:

      【解决方案3】:

      为什么不使用 android 可见性(真或假)。它会做你需要的同样的工作(或者你有一个特定的理由会撒谎使用 Span)?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多