2010-07-22 29 views
85

我在显示滚动型的一些数据。在活动启动(方法onCreate)我用数据填充ScrollView,并希望滚动到底部。如何滚动到底在滚动型上的活动启动

我试图用getScrollView().fullScroll(ScrollView.FOCUS_DOWN)。当我把它作为按钮点击的动作时,它会起作用,但它在onCreate方法中不起作用。

有什么办法如何滚动了滚动中的活动启动的底部?这意味着视图在第一次显示时已经滚动到底部。

+0

这也解释了为什么我得到0所有,当我试图用getMeasuredWidth同时初始化我自己的滚动型的子类时。 – Ghoti 2012-07-27 15:01:57

回答

196

它需要做如下:

getScrollView().post(new Runnable() { 

     @Override 
     public void run() { 
      getScrollView().fullScroll(ScrollView.FOCUS_DOWN); 
     } 
    }); 

这样的观点是先更新,然后滚动到“新”的底部。后

scrollview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     scrollview.post(new Runnable() { 
      public void run() { 
       scrollview.fullScroll(View.FOCUS_DOWN); 
      } 
     }); 
    } 
}); 
+1

我正在尝试这个,但它似乎仍然不工作......你是否在包含'Activity'的'onCreate'上调用上面的代码? – pstanton 2011-07-20 11:03:07

+0

我在onStart – Palo 2011-08-17 13:31:59

+3

而不是post()使用postDelayed()延迟100ms。它将从任何活动的生命周期点开始工作。 – 2015-06-03 13:39:08

15

可以在布局文件做到这一点:

   android:id="@+id/listViewContent" 
       android:layout_width="wrap_content" 
       android:layout_height="381dp" 
       android:stackFromBottom="true" 
       android:transcriptMode="alwaysScroll"> 
+0

这实际上适合我!道具! – 2012-09-16 10:51:56

+0

太棒了! :) – 2012-10-09 08:46:36

+8

这只适用于你的滚动视图是列表视图。 – 2013-07-03 21:39:52

42

将下面的代码加到你的数据之后:

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview)); 
scrollview.post(new Runnable() { 
    @Override 
    public void run() { 
     scrollview.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}); 
+3

对我来说,这只适用于postDelayed而不是后期。只有100毫秒的延迟。 – 2013-06-20 08:19:00

+0

完美。 当然与 scrollview.fullScroll(ScrollView.FOCUS_UP)连击; – KNU 2015-01-15 01:46:51

25

这对我的作品你在视图中添加数据添加这一行:

yourScrollview.fullScroll(ScrollView.FOCUS_DOWN); 
+0

太棒了。谢谢。 – Proverbio 2014-09-11 04:25:42

+1

目前为止这个问题的最佳答案。很多其他的方法是有条件的,但这一个是真棒ñ作品超好:) – rana 2016-11-16 23:05:33

3

右:

+0

为我工作:) – Smaran 2016-01-19 09:25:26

3

试试这个

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview)); 
    scrollview.post(new Runnable() { 
     @Override 
     public void run() { 
     scrollview.fullScroll(ScrollView.FOCUS_DOWN); 
     } 
    }); 
1

这是这样做的最佳方式。

scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new 
ViewTreeObserver.OnGlobalLayoutListener() { 
       @Override 
       public void onGlobalLayout() { 
        scrollView.post(new Runnable() { 
         public void run() { 
          scrollView.fullScroll(View.FOCUS_DOWN); 

         } 
        }); 
       } 
1

初始化您的UI组件并填充数据后。这些行添加到您的创建方法

Runnable runnable=new Runnable() { 
     @Override 
     public void run() { 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
     } 
    }; 
    scrollView.post(runnable); 
0
scrollView.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      scrollView.fullScroll(ScrollView.FOCUS_DOWN); 
     } 
    },1000);