Android ScrollView scrollTo()方法无法使用TextView?

时间:2012-06-28 07:42:24

标签: android textview scrollview

例如,我有这样的布局:

<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);
                }
            }); 

相反,它的工作原理。为遇到同样问题的人发布答案。

3 个答案:

答案 0 :(得分:19)

我找到了。好像我太早叫做scrollTo了。使用

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

相反,它的工作原理。为遇到同样问题的人发布答案。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

由于滚动视图尚未布局,因此必须在可运行对象内部调用scrollTo,因此在使用可运行对象时,您可以尝试屏幕闪烁。要解决此问题,您可以像这样在scrollview上监听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)
            }
        });
相关问题