ChatGPT解决这个技术问题 Extra ChatGPT

如何在活动启动时在 ScrollView 中滚动到底部

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

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

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

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

P
Palo

需要按以下方式进行:

    getScrollView().post(new Runnable() {

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

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


我正在尝试这个,但它似乎仍然无法正常工作......您是否在包含 ActivityonCreate 中调用上述代码?
相反 post() 使用具有 100 毫秒延迟的 postDelayed()。它将从任何活动的生命周期点开始工作。
C
Community

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

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); 组合使用
S
Seraphim's

这对我有用:

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

迄今为止这个问题的最佳答案。许多其他方法都是有条件的,但这个方法很棒 n 工作得非常好:)
T
Tam Dao

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

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

M
Makvin
 scrollView.postDelayed(new Runnable() {
        @Override
        public void run() {
            scrollView.fullScroll(ScrollView.FOCUS_DOWN);
        }
    },1000);

F
F.O.O

尝试这个

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

L
LEMUEL ADANE

将数据附加到视图后,立即添加这一行:

yourScrollview.fullScroll(ScrollView.FOCUS_DOWN);

J
Jacob

这是最好的方法。

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

R
Ramzy Hassan

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

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