仅在用户手动滚动时显示滚动条

时间:2014-01-19 16:57:28

标签: android android-layout android-scroll

我正在处理以下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添加一行时,每当新行被追加到{{1}时,滚动条就会开始显示和淡出},因为它的引力设置为TextView,所以它会让用户烦恼。

我想要实现的是仅当用户向上或向下手动滚动时才启用滚动条的可见性,但到目前为止还没有找到任何内容来实现它。我试过的是:

  • 在布局中将bottom设置为android:scrollbars并实施none,这样就可以启用onClickListenerscrolling并设置为发布后再次vertical,但是当用户释放屏幕时会触发此事件,但它不起作用。

  • none上相同,与onLongClickListener附加新行时的结果相同,布局设置为TextView gravity的底部1}},实际上这个监听器几乎没有被触发。

  • bottom上相同,我甚至无法实现此操作,因此我猜这不会被视为拖动操作。

  • 此课程未实施onDragListener

此时我对如何实现这一点没有想法,所以任何建议都表示赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

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

这样的事情:

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

当然,您应该重复使用单个Runnable对象来启用滚动条,而不是在每次更改文本时都创建一个新对象。

请注意,如果您将TextView重力设置为底部,则无论用户在过渡期间进行任何滚动,都会在文本发生变化时不断滚动到底部。