【问题标题】:How to scroll to bottom in a ScrollView on activity startup如何在活动启动时在 ScrollView 中滚动到底部
【发布时间】:2011-03-19 10:44:30
【问题描述】:

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

我尝试使用getScrollView().fullScroll(ScrollView.FOCUS_DOWN)。当我将其作为按钮单击操作但在 onCreate 方法中不起作用时,此方法有效。

有什么方法可以在活动启动时将 ScrollView 滚动到底部?这意味着视图在第一次显示时已经滚动到底部。

【问题讨论】:

  • 这也解释了为什么我在初始化我自己的 ScrollView 子类时尝试使用 getMeasuredWidth 时总是得到 0。

标签: android scroll


【解决方案1】:

这是最好的方法。

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

【讨论】:

    【解决方案2】:
     scrollView.postDelayed(new Runnable() {
            @Override
            public void run() {
                scrollView.fullScroll(ScrollView.FOCUS_DOWN);
            }
        },1000);
    

    【讨论】:

      【解决方案3】:

      在初始化你的 UI 组件并用数据填充它之后。将这些行添加到您的 on create 方法中

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

      【讨论】:

        【解决方案4】:

        试试这个

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

        【讨论】:

          【解决方案5】:

          在将数据附加到视图之后,添加这一行:

          yourScrollview.fullScroll(ScrollView.FOCUS_DOWN);
          

          【讨论】:

            【解决方案6】:

            这对我有用:

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

            【讨论】:

            • 迄今为止这个问题的最佳答案。许多其他方法都是有条件的,但这个很棒,效果很好:)
            【解决方案7】:

            添加数据后添加以下代码:

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

            【讨论】:

            • 对我来说,这只适用于 postDelayed 而不是 post。只有 100 毫秒的延迟。
            • 完美。当然与 scrollview.fullScroll(ScrollView.FOCUS_UP); 的组合;
            【解决方案8】:

            您可以在布局文件中执行此操作:

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

            【讨论】:

              【解决方案9】:

              需要做的如下:

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

              这种方式首先更新视图,然后滚动到“新”底部。

              【讨论】:

              • 我正在尝试这个,但它似乎仍然无法正常工作......您是否在包含 ActivityonCreate 中调用上述代码?
              • 代替 post() 使用具有 100 毫秒延迟的 postDelayed()。它将从任何活动生命周期点开始工作。
              猜你喜欢
              • 1970-01-01
              • 2020-02-11
              • 2013-02-14
              • 1970-01-01
              • 2015-08-03
              • 1970-01-01
              • 2014-12-12
              • 2011-02-19
              • 1970-01-01
              相关资源
              最近更新 更多