9

例如,我有这样的布局:

<ScrollView>
  <LinearLayout>
    <LinearLayout>
         ...
    </LinearLayout>
    <LinearLayout>
         ...
    </LinearLayout>
    <LinearLayout>
         <TextView>
         </TextView>
    </LinearLayout>
  </LinearLayout>
</ScrollView> 

我的 TextView 有很长的内容。现在我可以手动滚动 ScrollView 到 TextView 内容的末尾。在代码中,我写:scrview.scrollTo(0, 800);,scrview 是我的ScrollView。它应该滚动到 TextView 内容的中间。但是在运行的时候,它只滚动到了TextView的开头,并不能滚动浏览TextView的内容。

有谁知道是什么导致了这个问题?

编辑:我找到了。好像我调用 scrollTo 太快了。使用

scrview.post(new Runnable() {
                public void run() {
                    scrview.scrollTo(0, 800);
                }
            }); 

相反,它可以工作。为遇到同样问题的任何人发布答案。

4

3 回答 3

22

我找到了。好像我调用 scrollTo 太快了。使用

scrview.post(new Runnable() {
                public void run() {
                    scrview.scrollTo(0, 800);
                }
            }); 

相反,它可以工作。为遇到同样问题的任何人发布答案。

于 2012-07-04T10:13:46.530 回答
2

首先,如果你所有的 LinearLayouts 都具有相同的方向,为什么你不只创建一次呢?如果我没记错的话,ScrollView 只能有 1 个孩子(1 个直接孩子)。也许这可能是你的问题的原因。但是,如果您仍然想要这 3 个 LinearLayout,您可以创建一个 FrameLayout 作为父级来保存它们,并使该 FrameLayout 成为 ScrollView 的子级

于 2012-06-28T07:52:55.170 回答
0

您必须scrollTo在可运行对象内部调用,因为滚动视图尚未布局,因此在使用可运行对象时,您可以尝试屏幕闪烁。要解决此问题,您可以像这样在滚动视图上监听 lauyout 更改:

scrollview.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                scrollview.scrollTo(x, y)
            }
        });
于 2018-07-25T10:55:48.987 回答