Android - 将项添加到滚动视图并以编程方式滚动

时间:2016-01-27 01:58:28

标签: android uiscrollview

我有一个空的scrollview。我使用inflater创建一个文本视图,以编程方式将其添加到ScrollView,然后执行:

rsView.smoothScrollBy((viewLeft + viewWidth / 2) - center, 0);

但由于尚未测量视图,因此viewLeft和viewWidth为0。有关如何正确滚动视图的任何建议吗?

2 个答案:

答案 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);
        }
    });