簡體   English   中英

如何以編程方式將 ScrollView 滾動到底部

[英]How to Programmatically Scroll a ScrollView to Bottom

我有一個我無法解決的問題:在 ScrollView 中我只有一個 LinearLayout。 通過用戶操作,我以編程方式在此 LinearLayout 上添加 2 TextView,但默認情況下滾動保持在頂部。 由於我控制了用戶操作,我應該很容易滾動到底部,例如:

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());

但實際上不是。 因為在添加這兩個新元素之后 getBottom() 仍然返回前兩個。 我試圖刷新 state 調用refreshDrawableState() ,但我不工作。

您知道在添加一些元素后如何獲得 ScrollView 的實際底部嗎?

您需要使用消息隊列,否則它將無法工作。 嘗試這個:

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

這對我有用。

這實際上並沒有回答你的問題。 但它是一種替代方法,幾乎​​可以做同樣的事情。

不要滾動到屏幕底部,而是將焦點更改為位於屏幕底部的視圖。

也就是說,替換:

scroll.scrollTo(0, scroll.getBottom());

和:

Footer.requestFocus();

確保您指定視圖,例如“頁腳”是可聚焦的。

android:focusable="true"
android:focusableInTouchMode="true"

沒關系

scrollView.post(new Runnable() {
    @Override

    public void run() {

        scroll.scrollTo(0, scroll.getBottom());

    }
});

你試過scroll.fullScroll(View.FOCUS_DOWN)嗎?

你也可以應用這個

 mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);

因為,我也在使用隱藏鍵盤,下面延遲 200 毫秒的代碼對我來說效果更好。 注意:我剛剛從上面的例子中用 postDelayed() 替換了 post() :

    final ScrollView scrollView_main = (ScrollView) findViewById(R.id.scrollView_main);
    scrollView_main.postDelayed(new Runnable() {
        @Override
        public void run() {
            scrollView_main.fullScroll(View.FOCUS_DOWN);
        }
    }, 200);

我希望它有效

嘗試這個:

nsscroll.post(new Runnable() { @Override

                    public void run() {

                        nsscroll.scrollTo(0, nsscroll.getBottom());

                    }
                });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM