文本视图滚动不起作用

9
我想实现文本在TextView中垂直滚动,以防止该文本超出TextView所占的空间而无法完整显示。 不过我测试了以下两种方法,均未奏效:
1. tv1.setMovementMethod(new ScrollingMovementMethod()); 使用此方法后,对onFling()方法的调用将会停止。
2. 在layout XML中使用 同样地,在使用此方法时,对onFling()方法的调用也会停止。
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical"
android:fillViewport="true">

    <TextView
    android:id="@+id/TEXT_STATUS_ID"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1.0"/>

</ScrollView>

我的布局XML中的TextView如下所示。

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="2.26"
    android:background="@drawable/green"
    android:gravity="center"
    android:text="Large Text"
    android:textAppearance="?android:attr/textAppearanceLarge" />
3个回答

16

ScrollView中无法放置可滚动的View,例如TextViewListView。因此,请将简单的TextView放置在普通布局中,并为其添加android:scrollbars属性。

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:lines="3"
    android:scrollbars="vertical"
    android:scrollbarStyle="insideOverlay"
    android:fadeScrollbars="true"
    android:fadingEdge="vertical" />

Activity 部分,您必须编写类似以下内容的内容:

tv1.setMovementMethod(new ScrollingMovementMethod());

(基本上和您第一个点描述的一样)


1
嗨@yugidroid,我重试了,但没有成功。一旦我应用了tv1.setMovementMethod(new ScrollingMovementMethod());我的onFling()方法就停止工作了,而我需要它来左右滑动。 - Dan Jurgen

3
你可以尝试以下方法:

你可以这样做:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:fillViewport="true" >

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="vertical" >

    <TextView
        android:id="@+id/TEXT_STATUS_ID"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1.0"/>
</LinearLayout>
</ScrollView>

我必须使用 <linearLayout 吗? - Dan Jurgen
@DanJurgen,你需要做一件事。在ScrollView内部创建可滚动的TextView是行不通的。 - yugidroid
@yugidroid。我试过了,它可以工作。但是,文本的位置会变得太高或太低。有没有一种方法可以使其保持在两个固定长度之间?每当我在那里获得新的文本时,位置(比方说非常高)仍然适用于新的文本...我希望它能够居中。 - Dan Jurgen
当您覆盖dispatchTouchEvent方法时,onFling()方法和手势会起作用。@Override public boolean dispatchTouchEvent(MotionEvent ev){ super.dispatchTouchEvent(ev);
return productGestureDetector.onTouchEvent(ev); }
- Dan Jurgen

1
<ScrollView
android:id="@+id/SCROLLER_ID"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

    <TextView
    android:id="@+id/TEXT_STATUS_ID"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"

</ScrollView>

嗨@Danil。不幸的是,它无效。长文本无法向下滚动,它们被截断了。onFling()方法也不起作用。 - Dan Jurgen
你的安卓版本是什么?你的手机型号是什么? - Dan Jurgen
我有几个不同的设备。它们的基本功能并不重要。https://dev59.com/K2w15IYBdhLWcg3wWqV0 - Danil Onyanov

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