如何让ScrollView滚动到底部?

在我添加TextViews的过程中,我有一个带有LinearLayout的ScrollView。 但我总是希望最后添加的TextView可见,所以当添加TextView时,我需要ScrollView滚动到Bottom。 我不知道为什么,但是当我在添加textview之后调用scrollto(),scrollby()或fullScroll()时,它只会在最后一个之前滚动到textview。

你知道更好的方法吗?

非常感谢!

码:

我有一个Button,它调用了这个函数:

private void addRound() { // TODO Auto-generated method stub TextView newRound = new TextView(Stopwatch.this); newRound.setText("" + counter + ". - " + timerText()); newRound.setTextSize(20); newRound.setGravity(Gravity.CENTER); linlay.addView(newRound); counter++; } 

调用此函数后,我调用fullScroll()。

 addRound(); sv.fullScroll(View.FOCUS_DOWN); 

sv是我的ScrollView,linlay是scrollview中的linearlayout。

我认为这是因为在你调用sv.scrollFull(View.FOCUS_DOWN);时ScrollView还没有完全更新sv.scrollFull(View.FOCUS_DOWN); 尝试以下(替换您的第二个代码示例):

 addRound(); sv.post(new Runnable() { @Override public void run() { sv.fullScroll(View.FOCUS_DOWN); } }); 

如果上述方法不起作用,请尝试以下方法(这不是一种优雅的方式,但它可能有效):

 addRound(); sv.postDelayed(new Runnable() { @Override public void run() { sv.fullScroll(View.FOCUS_DOWN); } }, 100); 

希望这个有效!

另一种方法是使用ViewTreeObserver.OnGlobalLayoutListener。 在onCreate()方法中添加此代码段。

  linlay.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { sv.fullScroll(View.FOCUS_DOWN); } });