9

假设一个文本视图

TextView tvSum = findViewById(R.id.sumTexviewId);

如果我想更改显示的文本,我这样做:

tvSum.setText("£0.00");

现在,假设我经常这样做,比如每次按下按钮时,可能会显示在收款机上输入的总和。在这个例子中,你按一,它说“1p”,然后你按二,它说“12p”,依此类推。

我发现如果我这样做,文本会在一段时间后变得扭曲。对于序列 12345,从所有开始都是好的:

  • 0p(还没有按下)
  • 1便士(按下“1”)
  • 12便士(然后按“2”)
  • 1.23 英镑(然后按“3”)

然而,在那之后事情变得一团糟:

  • 混乱:£12.34(然后按“4”)
  • 混乱:£123.45(然后按“5”)

此后再也没有好转。我没有发布代码,因为代码真的很简单:一堆按钮,只向一个文本视图写入一个短字符串 - 代码中的任何内容都不应该导致这种情况,老实说。(是的,我已经通过将它放在 Toast 上检查了正在写入的字符串是否正确。)有没有其他人遇到过这个问题,如果有,是什么解决了这个问题?

4

1 回答 1

5

事实证明,Mr.Me的方向是正确的,这与文本更改时背景的渲染方式有关。我已(有意)设置按钮在黄色轮廓内具有透明背景(而不是未指定),使用颜色 0x00000000。

出于某种原因,当应用非完全不透明填充时,新背景会覆盖先前的内容(我认为大约 3 个位图的循环),而不是定义内容。我猜这可能是由于 Canvas 使用的默认 PorterDuff 传输模式。

我在解决这个问题时提出的解决方案:

  1. 不指定背景。这也是透明的,但出于某种原因主动如此。
  2. 有任何完整的 alpha 背景。(缺点:如果你想要一些透明度则不起作用)
  3. 编写一个自定义视图,onDraw在调用super.onDraw(). (缺点:这消除了该视图中的任何背景,但保留了该视图后面的视图。

为“没有做任何花哨的事情”声明道歉 - 我没有意识到主动将背景设置为透明也算花哨!

于 2013-05-11T13:08:08.010 回答