运行 在 TextView 中设置真正的大字符串后的代码
Run code after set really Large String at 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
我的问题是日志 return 0。
我认为这是因为在 setText()
结束这项工作之前执行了日志。于是尝试用thread,用Thread.join()
,不行
我已经用 onClickListener 检查了 "Is getMaxScrollAmount()
method run properly?",此方法 运行 正确并且 return 1280。
如何运行 Log.e("amount", readScrollView.getMaxScrollAmount());
这段代码完全结束setText代码后??
试试这个代码:
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
之前注册事件并在第一次调用时取消注册。
我用这段代码解决了问题。
readFile(path)
readScroll.post(new Runnable() {
@Override
public void run() {
readScroll.setScrollY(process);
}
});
那我可以运行 readScroll.setScrollY(process);
完全结束后readFile(path)
.
<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
我的问题是日志 return 0。
我认为这是因为在 setText()
结束这项工作之前执行了日志。于是尝试用thread,用Thread.join()
,不行
我已经用 onClickListener 检查了 "Is getMaxScrollAmount()
method run properly?",此方法 运行 正确并且 return 1280。
如何运行 Log.e("amount", readScrollView.getMaxScrollAmount());
这段代码完全结束setText代码后??
试试这个代码:
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
之前注册事件并在第一次调用时取消注册。
我用这段代码解决了问题。
readFile(path)
readScroll.post(new Runnable() {
@Override
public void run() {
readScroll.setScrollY(process);
}
});
那我可以运行 readScroll.setScrollY(process);
完全结束后readFile(path)
.