android - 在 TextView 设置非常大的字符串后运行代码
问题描述
<ScrollView
android:id="@+id/readScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/readTextView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</ScrollView>
这是示例 XML 文件。
ScrollView readScroll = findViewById(R.id.readScrollView);
TextView readTextView = findViewById(R.id.readTextView);
String largeText = So Large Text; // up to megabytes.
readTextView.setText(largeText); // So large that it spend some time.
Log.e("amount", readScrollView.getMaxScrollAmount()); // This Code return 0
我的问题是日志返回 0。
setText()
我认为这是因为在结束这项工作之前执行了 Log 。所以我尝试使用 thread 和 use Thread.join()
,它不起作用。
我已经检查过“getMaxScrollAmount()
方法运行正常吗?” 用onClickListener,这个方法运行正常,返回1280。
完全结束 setText 代码后如何运行Log.e("amount", readScrollView.getMaxScrollAmount());
此代码?
解决方案
试试这个代码:
mScrollView = findViewById(R.id.content_scroll);
mContentTxt = findViewById(R.id.content_txt);
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mScrollView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// MaxScrollAmount return non-zero
int maxScrollAmount = mScrollView.getMaxScrollAmount();
}
});
mContentTxt.setText("Long string here");
基本上,您会听到更改的ScrollViewer
布局,这是在其子视图对其大小进行某些操作后调用的。在事件之前注册事件setText
并在第一次调用时取消注册。