有没有办法以编程方式将ScrollView
滚动到某个位置?
我已经创建了放在ScrollView
中的动态TableLayout
。所以我想在一个特定的动作上(比如点击一个按钮,等等)特定的行应自动滚动到顶部位置。
有可能吗?
发布于 2011-06-22 18:16:31
ScrollView sv = (ScrollView)findViewById(R.id.scrl);
sv.scrollTo(0, sv.getBottom());
或
sv.scrollTo(5, 10);
发布于 2011-12-31 06:26:28
来自Pragna的答案并不总是有效的,试试这个:
mScrollView.post(new Runnable() {
public void run() {
mScrollView.scrollTo(0, mScrollView.getBottom());
}
});
或
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
}
});
如果您想滚动到开始
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(mScrollView.FOCUS_UP);
}
});
发布于 2013-05-15 17:43:32
我想让scrollView直接在onCreateView()之后滚动(而不是在点击按钮之后)。要让它正常工作,我需要使用ViewTreeObserver:
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
});
但要注意,每次布局时都会调用它(例如,如果你设置了一个不可见或类似的视图),所以如果你不再需要这个侦听器,不要忘记删除它:
开发工具包上的public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
Lvl < 16
或
SDK Lvl >= 16中的public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim)
https://stackoverflow.com/questions/6438061
复制相似问题