如果文本在android中较少,则字幕文本不会移动



我使用以下代码,它适用于大语句,但不适用于像"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文件中,您可以了解文本视图的宽度。仍然有问题,请告诉我。

最新更新