【问题标题】:Show scrollbars only when user manually scrolls仅在用户手动滚动时显示滚动条
【发布时间】:2014-01-19 16:57:27
【问题描述】:

我正在处理以下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:scrollbars 设置为none 并实现onClickListener,因此它将启用scrollingvertical 并在发布时再次设置为none,但就像这样用户释放屏幕后触发事件,它不起作用。

  • onLongClickListener 相同,与在TextView 上附加新行时的结果相同,布局设置为底部,因为gravitybottom,所以实际上是这个监听器几乎没有触发。

  • onDragListener 上也是如此,我什至无法实现触发,所以我猜这不会被识别为拖动动作。

  • 这个类没有实现onScrollListener

在这一点上,我对如何实现这一点没有任何想法,因此感谢您提供任何建议。谢谢。

【问题讨论】:

    标签: android android-layout android-scroll


    【解决方案1】:

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

    类似这样的:

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

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

    请注意,如果您将TextView 重力设置为底部,那么无论何时更改文本,它都会不断滚动到底部,而不管用户在此期间是否进行了任何滚动。

    【讨论】:

    • 谢谢!我明天试试,我会发布结果。不幸的是,重力设置为底部不是一个选项,所以我会尝试处理它,以便在单击时不向TextView 添加文本。
    • 完美运行!谢谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多