在Android 4.0.3中设置TextView的淡入效果。

6

我刚刚尝试在Android 4.0.3中为TextView实现淡入淡出效果,但是它没有生效。

fadingEdge="horizontal"
singleLine="true"
ellipsize="marquee"

这段代码在2.3.7及以下版本中完美运行,但在4.0.3上无法工作。 我想知道为什么会这样?如何为 TextView 实现淡入效果?
我的问题与这个相同:http://groups.google.com/group/android-developers/browse_thread/thread/97131b20de8b2ebd,但还没有答案。

使用 setHorizontalFadingEdgeEnabled(true); - Luca Ziegler
2个回答

4

虽然有点晚了,但这可能会帮助那些有同样问题的人。

我在不同的手机上遇到过这个问题,原因可能是:

  • 在Android 4.0.x上,TextView必须可聚焦,否则淡入淡出效果将无法实现。所以尝试添加这个:

    android:focusable="true" android:focusableInTouchMode="true"

  • 如果这样做没有用,你可以尝试android:lines="1",但我认为已经弃用的android:singleLine="true"效果更好

  • 有时候,你需要在代码中调用textView.setSelected(true)才能获得淡入淡出效果。请查看这个链接:Is there a way to make ellipsize="marquee" always scroll?


如果您设置了android:focusableInTouchMode,那么用户必须触摸才能获得焦点并发生淡入淡出效果。然而,我希望它像在GB 2.3.x中一样正常显示淡入淡出效果。 - Pete Houston
你尝试过不同的android:focusable和android:focusableInTouchMode组合吗?如果仍然无法解决问题,恐怕唯一的解决方案是在你的textView上编程调用setSelected()。 - Yves Delerm
我知道如果设置了 android:focusableInTouchMode,只要用户触摸 TextView 以接收焦点,它就会起作用并转换为淡出效果。我的意思是 TextView 的自然状态应该是这样的,不需要触摸。 - Pete Houston
由于我在Galaxy Nexus上进行了测试,因此android:focusableInTouchMode="true"没有任何问题。启用触摸模式后,我猜您需要尝试上面链接中的一些编程解决方案。 - Yves Delerm
2
为了让它在运行Android 4.4的Nexus上工作,我需要在xml中设置ellipsize =“marquee”,marqueeRepeatLimit =“0”和fadingEdge =“horizontal”,并在程序中使用setSelected(true)。如果没有设置marqueeRepeatLimit =“0”,我会得到自动滚动文本,这不是我想要的。 - Abid H. Mujtaba
@ShobhitPuri 我找了又找(在几个 Git 仓库中),但我就是找不到这段代码。抱歉。 - Abid H. Mujtaba

1

从API级别14开始,fadingEdge已被弃用并被忽略,因此为了使Android 4.0.3上的淡出边缘效果生效,您必须使用requiresFadingEdge


1
需要淡出边缘也无法工作。有什么建议! - CoDe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接