干净的滚动方式

时间:2018-09-22 18:10:36

标签: java android

我希望我的活动在每次显示时都进行滚动。 我使用此代码:

@Override
public void onResume() {

    ViewTreeObserver vto = maxButton.getViewTreeObserver();
    vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                maxButton.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                float y = maxButton.getY();
                findViewById(R.id.map_activity_scrollview).scrollTo(0, (int) (y - 2*Constants.SCREEN_HEIGHT/3));

            }
        });

    ConstraintLayout cl = findViewById(R.id.map_activity_constraint);
    Button b = new Button(this);
    cl.addView(b); // triggers the listener
    cl.removeView(b);

    super.onResume();
}

在不添加按钮的情况下,它仅在第一次显示活动时有效。 这就是为什么我人为地添加和删除按钮的原因。

是否有一种更清洁的方法?

1 个答案:

答案 0 :(得分:0)

如果用“显示”来表示onResume,并且基于您的代码,我认为您是这样做的,为什么不试一下呢?

@Override
public void onResume() {
    super.onResume();
    maxButton.post(new Runnable() {
        @Override
        public void run() {
            float y = maxButton.getY();
            findViewById(R.id.map_activity_scrollview).scrollTo(0, (int) (y - 2*Constants.SCREEN_HEIGHT/3));
        }
    }
}