在TextView上设置真正的大字符串后运行代码

时间:2018-05-08 01:28:57

标签: android textview android-scrollview

<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.join(),它不起作用。

我已经检查过“getMaxScrollAmount()方法是否正常运行?”使用onClickListener,此方法正常运行并返回1280.

完全结束setText Code后如何运行Log.e("amount", readScrollView.getMaxScrollAmount());这段代码?

2 个答案:

答案 0 :(得分:1)

试试这段代码:

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之前注册事件,并在第一次调用时取消注册。

答案 1 :(得分:0)

我用这段代码解决了这个问题。

readFile(path)
readScroll.post(new Runnable() {
    @Override
    public void run() {
        readScroll.setScrollY(process);
    }
});

然后我可以在完全结束后readScroll.setScrollY(process);运行readFile(path)