How to Programmatically Scroll a ScrollView to Bottom

JavaAndroidAndroid LayoutAndroid Scrollview

Java Problem Overview


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?

Java Solutions


Solution 1 - Java

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 - Java

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 - Java

this will be ok

scrollView.post(new Runnable() {
    @Override

    public void run() {

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

    }
});

Solution 4 - Java

Have you tried scroll.fullScroll(View.FOCUS_DOWN)?

Solution 5 - Java

you can apply this also

 mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);

Solution 6 - Java

Since, I am also using hide keyboard, below code with a delay of 200 milli second worked better for me. Note: I just replaced post() with postDelayed() from above examples:

    final ScrollView scrollView_main = (ScrollView) findViewById(R.id.scrollView_main);
    scrollView_main.postDelayed(new Runnable() {
        @Override
        public void run() {
            scrollView_main.fullScroll(View.FOCUS_DOWN);
        }
    }, 200);

Solution 7 - Java

I Hope it Work

Try this:

nsscroll.post(new Runnable() { @Override

                    public void run() {

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

                    }
                });

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionwikierView Question on Stackoverflow
Solution 1 - JavaSBerg413View Answer on Stackoverflow
Solution 2 - JavametalwihenView Answer on Stackoverflow
Solution 3 - JavasxkView Answer on Stackoverflow
Solution 4 - JavaTotoroTotoroView Answer on Stackoverflow
Solution 5 - JavaAalishan AnsariView Answer on Stackoverflow
Solution 6 - JavaSunny JhaView Answer on Stackoverflow
Solution 7 - JavaKushal PrajapatiView Answer on Stackoverflow