代码之家  ›  专栏  ›  技术社区  ›  SunSpike

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

  •  1
  • SunSpike  · 技术社区  · 6 年前
    <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() 结束这项工作。所以我试着用线程和 Thread.join() ,它不起作用。

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

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

    2 回复  |  直到 6 年前
        1
  •  1
  •   Tam Huynh    6 年前

    请尝试以下代码:

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

        2
  •  0
  •   SunSpike    6 年前

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

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

    那我就可以跑了 readScroll.setScrollY(process); 完全结束后 readFile(path)