我正在处理以下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
,这样就可以启用onClickListener
到scrolling
并设置为发布后再次vertical
,但是当用户释放屏幕时会触发此事件,但它不起作用。
none
上相同,与onLongClickListener
附加新行时的结果相同,布局设置为TextView
gravity
的底部1}},实际上这个监听器几乎没有被触发。
在bottom
上相同,我甚至无法实现此操作,因此我猜这不会被视为拖动操作。
此课程未实施onDragListener
。
此时我对如何实现这一点没有想法,所以任何建议都表示赞赏。感谢。
答案 0 :(得分:1)
您可以在将新文本附加到TextView
之前禁用垂直滚动条,并在绘制文本后发布事件以重新启用它。
这样的事情:
textView.setVerticalScrollBarEnabled(false);
textView.append("New Text");
textView.post(new Runnable() {
@Override
public void run() {
textView.setVerticalScrollBarEnabled(true);
}
});
当然,您应该重复使用单个Runnable
对象来启用滚动条,而不是在每次更改文本时都创建一个新对象。
请注意,如果您将TextView
重力设置为底部,则无论用户在过渡期间进行任何滚动,都会在文本发生变化时不断滚动到底部。