例如,我有这样的布局:
<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);
}
});
相反,它的工作原理。为遇到同样问题的人发布答案。
答案 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)
}
});