如何在单行中使用水平滚动设置文本视图中的长字符串

6
实际上,我有一个滚动视图。在该滚动视图中,我设置了一个文本视图。在运行时,我想要在该文本视图中设置文本。我将要设置的字符串长度有些长,所以我不能将字符串放在一行中,它可能会占据两三行。我的滚动视图布局宽度为250像素。我不想超过这个大小... 我的期望是,如果字符串超过了滚动视图大小,则应在文本视图中水平滚动,否则我希望看到该字符串作为单行显示在滚动视图中。我尝试了一些函数,如将水平滚动设置为滚动视图和文本视图,但都没有起作用。请帮我解决这个问题。
您的,
s.kumaran.

如果可能的话,将TextView放在HorizontalScrollView之外。 - dira
6个回答

6

在您的TextView小部件中,您必须使用这两个Xml属性:

android:scrollHorizontally="true"

android:singleLine="true"

因此,您的xml布局必须包含类似于以下内容:

<TextView
        android:text="Single-line text view that scrolls automatically if the text is too long to fit in the widget" 
        android:singleLine="true" 
        android:ellipsize="marquee"
        android:marqueeRepeatLimit ="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true" 
        android:scrollHorizontally="true"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"/>

如果您正在使用代码创建TextView,可以参考TextView文档获取这些属性的相应方法:

setHorizontallyScrolling(boolean)
setTransformationMethod(TransformationMethod)
setMarqueeRepeatLimit(int)

正确的解决方案,我正在面临这个问题,现在要摆脱它。 - Binesh Kumar

3

试试这个...

TextView.setHorizontallyScrolling(true) TextView.setLines(1);

你在哪里添加了TextView? 在ScrollView中只能添加一个视图...


谢谢您的及时回复,但我已经尝试了这两种方法,但都没有起作用。 - Kumar
很遗憾,这并不足以让TextView滚动文本!请查看我的答案,其中包含非直观的解决方案 ;) - 3c71

2

使用TextViewHorizontalScrollView来实现。只需将TextView放在HorizontalScrollView中即可。确保在TextView中提到android:singleLine="true"


2

我曾经遇到过一个类似的问题,一个TextView在表格中,但是这里的解决方案并没有详细说明如何解决它不能自动横向滚动的问题(也许这不是提问者想要的效果,但是很不清楚)。

当我比较一些可以工作的代码时,我发现TextView必须被选中才能开始滚动:

TextView text_view = new TextView(context);
text_view.setLines(1);
text_view.setHorizontallyScrolling(true);
text_view.setMarqueeRepeatLimit(-1);  //  At this point the view is not scrolling!
...
text_view.setSelected(true);          //  Get scrolling to start

听起来很疯狂,但它确实有效。


0

对我来说,EditText xml 中的这一行就足够了:

android:singleLine="true"

0

您没有说明这是在XML还是Java代码中,但以下是使其工作的Java代码:

    // Allow textView to scroll
    textView.setSingleLine(true);
    textView.setHorizontallyScrolling(true);
    textView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
    textView.setMarqueeRepeatLimit(-1);
    textView.setSelected(true);
    textView.setPadding(10, 0, 10, 0);

这里唯一不必要的元素是填充,我发现填充最好看,这样文本就不会触及我们的 250 像素 TextView 的边框。

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