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

wik*_*ier 43 java android android-layout android-scrollview

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

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());
Run Code Online (Sandbox Code Playgroud)

但事实并非如此.因为在添加这两个新元素后立即getBottom()仍然返回前两个.我试图刷新状态调用refreshDrawableState(),但我不工作.

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

SBe*_*413 100

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

scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
});
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 这也适用于 NestedScrollView,我试过了。谢谢 (4认同)

met*_*hen 68

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

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

也就是说,替换:

scroll.scrollTo(0, scroll.getBottom());
Run Code Online (Sandbox Code Playgroud)

有:

Footer.requestFocus();
Run Code Online (Sandbox Code Playgroud)

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

android:focusable="true"
android:focusableInTouchMode="true"
Run Code Online (Sandbox Code Playgroud)


小智 18

这没关系

scrollView.post(new Runnable() {
    @Override

    public void run() {

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

    }
});
Run Code Online (Sandbox Code Playgroud)


Mac*_*tle 5

你试过scroll.fullScroll(View.FOCUS_DOWN)吗?

  • `scroll.fullScroll(View.FOCUS_DOWN)` 是我尝试的第一件事,但它不起作用。 (3认同)