我使用以下代码,它适用于大语句,但不适用于像"hello"这样的小文本。
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:maxLines="1"
android:scrollHorizontally="true"
android:singleLine="true"
android:text="this_bill_has_some_unipay_points_promotion"/>
您应该调用TextView.isSelected=true来开始文本移动。
编辑:工作解决方案
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="48dp"
android:ellipsize="marquee"
android:gravity="center_vertical"
android:scrollHorizontally="true"
android:singleLine="true"
android:textColor="@android:color/white" />
扩展功能
fun TextView.setMovingText(text: String) = this.post {
val textWidth = this.paint.measureText(text)
val spaceWidth = this.paint.measureText(" ")
val requiredAdditionalSpace = ((this.width - textWidth) / spaceWidth).toInt()
this.text = StringBuilder(text).apply {
for (i in 0..requiredAdditionalSpace) {
append(" ")
}
}
this.isSelected = true
}
如何使用
textView.setMovingText("Hey")
我只是想展示一个有效的解决方案。此外,您还可以(应该(修改以获得更好的性能,并检查负值。
您必须将布局宽度设置为(30dp-40dp(,而不是android:layout_width="match_parent">,因为当字符长于视图宽度时,会启用字幕。
是的,根据marquee属性,如果文本小于布局的宽度,则不应滚动。
如果您仍然想移动它,那么您可以手动/静态设置视图的宽度集,并且文本将移动,在layout.xml文件中,您可以了解文本视图的宽度。仍然有问题,请告诉我。