添加新视图时,android scrollview滚动到顶部方向

时间:2016-08-22 17:01:26

标签: android views scrollview

Image

在scrollview中,如果我在中间添加任何视图,通常所添加视图下方的所有视图都会向下滚动。但是我想在不打扰底部视图的情况下将添加视图的顶视图向上滚动。在scrollview中是否可以帮助我?

在图中,如果添加了视图4,则必须向上滚动视图1,而不更改视图2和视图3的位置。

2 个答案:

答案 0 :(得分:0)

你可以获得你正在添加的视图的高度,然后手动滚动滚动视图那么多像素

scrollView.scrollBy(0, viewAdded.getHeight())

答案 1 :(得分:0)

我一直想尝试这个问题很长一段时间,我终于有机会了。该方法非常简单(事实上,@ dweebo之前已经提到过) - 我们在添加视图时向上移动ScrollView。为了在添加时获得精确(且有效)的维度,我们使用ViewTreeObserver。以下是您可以从中获得提示的代码:

    // Getting reference to ScrollView
    final ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
    // Assuming a LinearLayout container within ScrollView
    final LinearLayout parent = (LinearLayout) findViewById(R.id.parent);

    // The child we are adding
    final View view = new View(ScaleActivity.this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100);
    view.setLayoutParams(params);

    // Finally, adding the child
    parent.addView(view, 2); // at index 2

    // This is what we need for the dimensions when adding
    ViewTreeObserver viewTreeObserver = parent.getViewTreeObserver();
    viewTreeObserver.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
        @Override
        public boolean onPreDraw() {
            parent.getViewTreeObserver().removeOnPreDrawListener(this);

            scrollView.scrollBy(0, view.getHeight());
            // For smooth scrolling, run below line instead
            // scrollView.smoothScrollBy(0, view.getHeight())

            return false;
        }
    });