TextView中的滚动条

时间:2010-12-20 13:01:59

标签: android scrollbar

我只是不想使用ScrollView。所以我有一个启用垂直滚动条的textview。

<TextView
    android:id="@+id/tv_service_ticketinfo_details"
    android:layout_width="fill_parent"
    android:layout_height="150dp"           
    android:textColor="@color/black"
    android:autoLink="web"
    android:scrollbars="vertical"
    android:text="empty"
    android:background="@drawable/custom_shape_grey">
</TextView>

问题是,滚动条只能滚动包含网页链接的文本。对于其他文本,我看到滚动条,但无法滚动。

我无法解释。而你?

UPD:

另一件奇怪的事: 一旦我用链接设置文本,那么我可以用另一个没有链接替换它,textView保持可滚动

3 个答案:

答案 0 :(得分:4)

所以我认为问题是TextViews不会自动滚动,只是因为你设置了android:scrollbars。您必须设置ScrollingMovementMethod。

但是,当您使用autoLink并找到链接时,android框架将为您设置MovementMethod。这就是行为不同的原因。

有两种解决方案适合我。

在我们设置文本后,强制移动方法为支持链接和滚动的方法。

final TextView output = (TextView) findViewById(R.id.output);
output.setText(content);
// ensure that text will scroll with or without linked text
output.setMovementMethod(LinkMovementMethod.getInstance());

或者在向TextView添加文本之前设置移动方法(假定是纯文本)。如果autoLink检测到链接,它将改变移动方法本身。

final TextView output = (TextView) findViewById(R.id.t_output);
// ensure that text defaults to scrollable
output.setMovementMethod(ScrollingMovementMethod.getInstance());
output.setText(content);

(仅供参考:我正在使用android:autoLink="all"

答案 1 :(得分:1)

在您的代码中添加此内容(可能在onCreate中)

//textView.setMovementMethod(ScrollingMovementMethod.getInstance()); 
tv_service_ticketinfo_details.setMovementMethod(ScrollingMovementMethod.getInstance()); 

并测试。

答案 2 :(得分:1)

要在运行时或代码中获取滚动条,您可以尝试使用以下解决方案:

的xml:

<LinearLayout
        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:gravity="center">   
          <TextView
                   android:id="@+id/tv_service_ticketinfo_details"
                   android:layout_width="fill_parent"
                   android:layout_height="150dp"           
                   android:textColor="@color/black"
                   android:autoLink="web"
                   android:scrollbars="vertical"
                   android:text="empty"
                   android:background="@drawable/custom_shape_grey">
          </TextView>
   </LinearLayout>

的java:

mTextViewPort = (LinearLayout) findViewById(R.id.view1);
// Create a ScrollView instance
ScrollView mScrollView = new Scrollview(mContext);
// here mContext would be Activity's context. You may also choose
// mScrollView as a global variable.
mScrollView.setScrollBarStyle(SCROLLBARS_OUTSIDE_INSET);
mTextViewPort.addView(mScrollView,
    new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
TextView mTextView = (TextView) findViewById(R.id.tv_service_ticketinfo_details);
mScrollView.addView(mTextView );

这可能有助于解决此问题。