2010-07-22 30 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);