如何以任何文本长度自动水平滚动文本视图?

Posted

技术标签:

【中文标题】如何以任何文本长度自动水平滚动文本视图?【英文标题】:How to horizontally scroll textview automatically with any text length? 【发布时间】:2021-07-02 22:04:08 【问题描述】:

我想让我的文本视图自动滚动,即使没有太多的文本可以放入屏幕。我也没有找到任何可以水平滚动 textview 的库,只能垂直滚动。

我创建了我的文本视图,这是我的 xml 代码:

<TextView
        android:id="@+id/ticker"
        android:layout_
        android:layout_
        android:text="My text"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:scrollHorizontally="true"
        android:singleLine="true"
        android:textColor="@color/black"
        android:textSize="22sp" />

在我的活动中我使用:

TextView ticker = findViewById(R.id.ticker);
ticker.setSelected(true);

主要的是,如果文本长度大于可以适合屏幕的长度,文本会滚动,但我需要使用任何文本进行滚动。有什么建议吗?

【问题讨论】:

【参考方案1】:

如果TextView 没有填满宽度,唯一的办法就是调用这个方法并将TextView 传递给它。

    fun addMarquee(textView: TextView) 
    textView.viewTreeObserver.addOnGlobalLayoutListener(object :
        ViewTreeObserver.OnGlobalLayoutListener 
        override fun onGlobalLayout() 
            val pixels = textView.measuredWidth - 1
            val params = textView.layoutParams
            params.width = pixels
            textView.layoutParams = params
            textView.isSelected = true
            textView.ellipsize = TextUtils.TruncateAt.MARQUEE
            textView.isSingleLine = true
            textView.marqueeRepeatLimit = -1
            textView.viewTreeObserver.removeOnGlobalLayoutListener(this)
        
    )

注意:此方法仅在 textView 宽度为 wrap_content 时有效。

【讨论】:

【参考方案2】:

您必须测量屏幕重量并像选框一样放置动画。 解决方法请参考以下链接。

https://***.com/a/16371310/9121785

【讨论】:

【参考方案3】:
<HorizontalScrollView
    android:layout_
    android:layout_>
    <TextView 
        android:layout_
        android:layout_
        android:scrollHorizontally="true"
        android:text="This is an Example of Horizontal TextView Scrolling This is an Example of Horizontal TextView Scrolling This is an Example of Horizontal TextView Scrolling"/></HorizontalScrollView>

上面的代码将帮助您使 textview scollable

【讨论】:

以上是关于如何以任何文本长度自动水平滚动文本视图?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI - 自动滚动水平滚动视图以显示全文标签

当文本长度很大时,在网格内呈现的 LinkBut​​ton 会显示水平滚动条

SwiftUI:如何让滚动视图包含完整列表长度

表格布局可以同时具有水平和垂直滚动视图吗

如何将stackview一起用于标签和文本字段,其中文本字段的长度更长

如何调整标签大小以适应任何屏幕尺寸