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

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

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

但实际上不是。因为在添加这两个新元素后,getBottom()仍然返回前两个。我试图刷新状态调用,但我不起作用。refreshDrawableState()

您知道在添加一些元素后,我如何获得ScrollView的实际底部吗?


答案 1

您需要使用消息队列,否则它将不起作用。试试这个:

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

这就是对我有用的东西。


答案 2

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

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

也就是说,替换:

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

跟:

Footer.requestFocus();

确保指定视图(例如“页脚”)是可聚焦的。

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

推荐