Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在TextView中设置非常大的字符串后运行代码_Android_Textview_Android Scrollview - Fatal编程技术网

Android 在TextView中设置非常大的字符串后运行代码

Android 在TextView中设置非常大的字符串后运行代码,android,textview,android-scrollview,Android,Textview,Android Scrollview,我的问题是日志返回0 我想这是因为日志是在setText()结束这项工作之前执行的。所以我试着使用thread和thread.join(),它不起作用 我已经用onClickListener检查了“IsgetMaxScrollAmount()method run Rightly?”这个方法运行正常并返回1280 如何运行Log.e(“amount”,readScrollView.getMaxScrollAmount())此代码完全结束后的setText代码 请尝试以下代码: ScrollView

我的问题是日志返回0

我想这是因为日志是在
setText()
结束这项工作之前执行的。所以我试着使用thread和
thread.join()
,它不起作用

我已经用onClickListener检查了“Is
getMaxScrollAmount()
method run Rightly?”这个方法运行正常并返回1280

如何运行Log.e(“amount”,readScrollView.getMaxScrollAmount())此代码完全结束后的setText代码

请尝试以下代码:

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

基本上,您会听到
ScrollViewer
layout changed,它是在其子视图对其大小做了一些调整后调用的。在
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");

然后我可以运行
readScroll.setScroly(进程)
完全结束后
读取文件(路径)

有人可以正确编辑此问题吗?抱歉,我的英语不流利。请尝试将TextWatcher添加到TextView@cricket_007你能在回答时写下这个评论吗?我会检查你的答案是否有效。谢谢我还没有尝试过它,因此我将以commentcall
readScrollView.post(runnable)
的形式离开,并将
getMaxScrollAmount()
的值记录在该
runnable
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");
readFile(path)
readScroll.post(new Runnable() {
    @Override
    public void run() {
        readScroll.setScrollY(process);
    }
});