2014-01-19 124 views
0

我正在以下TextView显示滚动条,当用户手动滚动

<?xml version="1.0" encoding="utf-8"?> 
    <TextView xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/tabsContent" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="3dp" 
     android:background="@drawable/rounded_edges" 
     android:gravity="bottom" 
     android:padding="8dp" 
     android:scrollHorizontally="false" 
     android:scrollbarStyle="insideOverlay" 
     android:scrollbars="vertical" 
     android:textColor="#FFFFFF" 
     android:textSize="11sp" 
     android:typeface="monospace" /> 

TextView用于显示大量的数据,我从一个Socket得到的,所以内容是由更新背景Service。问题在于,在一定数量的文本之后,滚动条被启用,并且每当我向TextView添加一行时,每次将新行添加到TextView时,滚动条开始显示并淡出,因为其重力被设置为bottom,所以对用户来说很烦人。

我想实现的目的只有当用户滚动手动向上或向下滚动时才能看到滚动条,但目前还没有发现任何实现此功能的内容。我已经试过是:

  • 设置android:scrollbarsnone布局和实施onClickListener,所以它将使scrollingvertical并设置为none再次释放,但由于此事件触发一次用户释放屏幕,它不起作用。

  • 相同的onLongClickListener,同样的结果,当一个新行追加到TextView为,布局设置为它的底部为gravitybottom,所以实际上这个监听器几乎没有触发。

  • onDragListener相同,我甚至无法达到这个要求,所以我想这不会被识别为拖动动作。

  • 该课程未实施onScrollListener

在这一点上,我对如何实现这一点的想法,所以任何意见表示赞赏。谢谢。

回答

1

在将新文本附加到TextView之前,可以禁用垂直滚动条,并在绘制文本后发布事件以重新启用它。

事情是这样的:

textView.setVerticalScrollBarEnabled(false); 
textView.append("New Text"); 
textView.post(new Runnable() { 
    @Override 
    public void run() { 
     textView.setVerticalScrollBarEnabled(true); 
    } 
}); 

当然,你应该重用一个Runnable对象实现滚动条,而不是建立在每次更改文本一个新的。

请注意,如果您将TextView重力设置为底部,则无论用户在此期间进行了何种滚动操作,只要文本发生更改,它都会一直滚动到底部。

+0

感谢您的支持!我明天会试试,我会公布结果。不幸的是,设置为底部的重力不是一种选择,所以我会尝试处理它,以避免在单击时向“TextView”添加文本。 – nKn

+0

完美的作品!谢谢!! – nKn