如何以编程方式将ScrollView滚动到底部

时间:2011-11-04 20:23:29

标签: java android android-layout android-scrollview

我遇到了一个无法解决的问题:在ScrollView中我只有一个 LinearLayout中。通过用户操作,我以编程方式添加2个TextView 在此LinearLayout上,但默认情况下滚动保持在顶部。 由于我控制用户操作,我应该很容易滚动到 底部有类似的东西:

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());

但实际上并非如此。因为在添加这两个新的后立即 elements getBottom()仍然返回前两个。我试过了 刷新调用refreshDrawableState()的状态,但我不起作用。

您是否知道如何获得ScrollView的实际底部? 添加一些元素后?

6 个答案:

答案 0 :(得分:92)

您需要在单独的线程上滚动,否则它将无法正常工作。试试这个:

scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

这对我有用。

答案 1 :(得分:61)

这实际上并没有回答你的问题。 但它是一种替代品,几乎可以做同样的事情。

不要滚动到屏幕底部,而是将焦点更改为位于屏幕底部的视图。

即,替换:

scroll.scrollTo(0, scroll.getBottom());

使用:

Footer.requestFocus();

确保指定视图,说'页脚'是可聚焦的。

android:focusable="true"
android:focusableInTouchMode="true"

答案 2 :(得分:17)

这没关系

scrollView.post(new Runnable() {
    @Override

    public void run() {

        scroll.scrollTo(0, scroll.getBottom());

    }
});

答案 3 :(得分:3)

您是否尝试过scroll.fullScroll(View.FOCUS_DOWN)

答案 4 :(得分:0)

你也可以申请

 mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);

答案 5 :(得分:0)

因为我也在使用隐藏键盘,所以下面的代码延迟 200 毫秒对我来说效果更好。 注意:我刚刚用上面例子中的 postDelayed() 替换了 post() :

    final ScrollView scrollView_main = (ScrollView) findViewById(R.id.scrollView_main);
    scrollView_main.postDelayed(new Runnable() {
        @Override
        public void run() {
            scrollView_main.fullScroll(View.FOCUS_DOWN);
        }
    }, 200);