在开发过程中,发现Recyclerview中的TextView设置了跑马灯marquee效果无效,在网上查了很多资料,各说纷纭,试验后都不理想,在此做记录。
<TextView></TextView>控件,需要设置属性:
<style name="style_white_text_48">
<item name="android:singleLine">true</item>
<item name="android:focusable">true</item>
<item name="android:focusableInTouchMode">true</item>
<item name="android:marqueeRepeatLimit">marquee_forever</item>
<item name="android:scrollHorizontally">true</item>
<item name="android:ellipsize">marquee</item>
</style>
注意:1、这里使用了
<item name="android:singleLine">true</item>
使用“maxLines=1”反而没有效果,资料上查了很多说要使用maxLines的。
2、使用
<item name="android:marqueeRepeatLimit">marquee_forever</item>
默认时,跑马灯会运行三次就停了,设置“marquee_forever”会无限重复
注意:不要添加 android:selectAllOnFocus="true" ,如果添加,虽然也会有跑马灯效果,但会出现点点点
重点来了,光在xml文件里设置是没有用的,需要在RecyclerViewAdapter中,onBindViewHolder中获取到TextView时,对其进行setSelected(true)。要想TextView有跑马灯效果,这个TextView必须获取到焦点。
按照上述方法设置后,会发现还是会有个问题,必须点击一下对应的item后,跑马灯才会有效果。始终未解决,估计要自定义跑马灯通过message/handler去写跑马灯效果