我有一个空的scrollview。我使用inflater创建一个文本视图,以编程方式将其添加到ScrollView,然后执行:
rsView.smoothScrollBy((viewLeft + viewWidth / 2) - center, 0);
但由于尚未测量视图,因此viewLeft和viewWidth为0。有关如何正确滚动视图的任何建议吗?
答案 0 :(得分:1)
将smoothScrollBy()
来电转移到Runnable
并在添加后将其发布到新的TextView
处理程序,这将使其运行在它布局之后。例如:
viewGroup.addView(childView);
childView.post(new Runnable() {
@Override
public void run() {
rsView.smoothScrollBy((childView.getLeft() + childView.getWidth() / 2) - center, 0);
}
}
);
我不确定你是如何计算center
的,但如果它取决于新TextView
的尺寸,你需要移动计算到Runnable
。
答案 1 :(得分:1)
在这篇文章中:getWidth() and getHeight() of View returns 0你有很多很好的选择来解决这个问题。特别是我用这个:
收听绘图/布局事件:ViewTreeObserver
ViewTreeObserver会因不同的绘图事件而被触发。通常,OnGlobalLayoutListener是您获得测量所需的,因此在布局阶段之后将调用侦听器中的代码,因此测量就绪了:
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rsView.smoothScrollBy((viewLeft + viewWidth / 2) - center, 0);
}
});