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 1:
You need to use the message queue or else it won't work. Try this:
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
This is what worked for me.
Solution 2:
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"
Solution 3:
this will be ok
scrollView.post(new Runnable() {
@Override
public void run() {
scroll.scrollTo(0, scroll.getBottom());
}
});
Solution 4:
Have you tried scroll.fullScroll(View.FOCUS_DOWN)
?