[英]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.