I think there’s a timing issue. Layout isn’t done when a view is added. It is requested and done a short time later. When you call fullScroll immediately after adding the view, the width of the linearlayout hasn’t had a chance to expand.
Try replacing:
s.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
with:
s.postDelayed(new Runnable() {
public void run() {
s.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
}, 100L);
The short delay should give the system enough time to settle.
P.S. It might be sufficient to simply delay the scrolling until after the current iteration of the UI loop. I have not tested this theory, but if it’s right, it would be sufficient to do the following:
s.post(new Runnable() {
public void run() {
s.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
});
I like this better because introducing an arbitrary delay seems hacky to me (even though it was my suggestion).