我在 ScrollView(SV)中有父 RelativeLayout(RL)。在父RL中我有一个孩子也是RL。我想将另一个子RL添加到父RL并向下滚动屏幕高度
RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(this.width,
this.height);
lparams.addRule(RelativeLayout.BELOW, first_child.getId());
new_layout.setLayoutParams(lparams);
rl.addView(new_layout);
int current_pos = sv.getScrollY();
sv.smoothScrollTo(0,current_pos + this.height);
新的子RL已成功添加到父级,但 smootScrollTo 方法无法正常工作。它就像 addView()方法是异步工作的,当方法 smoothScrollTo 正在调用时,父RL还没有包含新的子RL。
如何在父母中添加新的子RL并立即向下滚动屏幕?
答案 0 :(得分:6)
试试这个:
RelativeLayout.LayoutParams lparams = new RelativeLayout.LayoutParams(this.width,
this.height);
lparams.addRule(RelativeLayout.BELOW, first_child.getId());
new_layout.setLayoutParams(lparams);
rl.addView(new_layout);
int height = this.height;
sv.post(new Runnable() {
@Override
public void run() {
int current_pos = sv.getScrollY();
sv.smoothScrollTo(0,current_pos + height);
}
});
答案 1 :(得分:1)
以下代码可以使用:
final int scrollposition = Math.round(hr/24.0f * 1440f);
final ScrollView sv = (ScrollView)findViewById(R.id.graphScrollView);
//sv.smoothScrollTo(0, scrollposition);
sv.post(new Runnable() {
@Override
public void run() {
sv.smoothScrollTo(0, scrollposition);
}
});
<强>原因:强> 在运行底层代码之前,它将等待滚动视图发布。