我有一个空的滚动视图。我用吹气创建一个文本视图,将其添加到滚动型编程,然后做:Android - 将项目添加到滚动视图并以编程方式滚动
rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0);
但随着观点尚未测量viewLeft和viewWidth是0。有关如何使其正确滚动视图的任何建议?
我有一个空的滚动视图。我用吹气创建一个文本视图,将其添加到滚动型编程,然后做:Android - 将项目添加到滚动视图并以编程方式滚动
rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0);
但随着观点尚未测量viewLeft和viewWidth是0。有关如何使其正确滚动视图的任何建议?
在这篇文章中: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);
}
});
不完全是,我使用超级视图来获取树观察者,因为它更容易,但它似乎工作。谢谢! – Panos
将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
,也是如此。
你是如何测量viewWidth? – Sanf0rd
直到现在它作为固定的文本视图,我用: int viewLeft = childView.getLeft(); int viewWidth = childView.getWidth(); 但现在我动态添加视图 – Panos