Search code examples
javaandroidandroid-layoutandroid-scrollview

How to Programmatically Scroll a ScrollView to Bottom


I've a problem I can't solve: inside a ScrollView I only have a LinearLayout. By a user action I'm programmatically adding 2 TextView on this LinearLayout, but by the default the scroll keeps on the top. Since I controll the user action, I should be easy to scroll to the bottom with something like:

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

But actually not. Because immediately after adding this two new elements getBottom() still returns the previous two. I tried to refresh the state invoking refreshDrawableState(), but I doesn't work.

Do you have any idea how could I get the actual bottom of a ScrollView after adding some elements?


Solution

  • This doesn't actually answer your question. But it's an alternative which pretty much does the same thing.

    Instead of Scrolling to the bottom of the screen, change the focus to a view which is located at the bottom of the screen.

    That is, Replace:

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

    with:

    Footer.requestFocus();
    

    Make sure you specify that the view, say 'Footer' is focusable.

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