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

新手上路,请多包涵

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

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

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

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

原文由 wikier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 530
2 个回答

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

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

即,替换:

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

和:

 Footer.requestFocus();

确保指定视图,比如“页脚”是可聚焦的。

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

原文由 metalwihen 发布,翻译遵循 CC BY-SA 3.0 许可协议

您需要使用消息队列,否则它将无法工作。尝试这个:

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

这对我有用。

原文由 SBerg413 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题