ScrollView巢狀GridView,ListView自動滾動到第一條Item的解決辦法
阿新 • • 發佈:2019-02-07
當ScrollView下巢狀GridView或ListView時,如果內容超過一屏預設位置不在ScrollView的頂部,用scrollViewMsg.scrollTo(0,0)設定也不起作用,這是因為巢狀GridView或ListView獲了焦點,解決方法有如下幾種:
方法1: scrollView.fullScroll(ScrollView.FOCUS_UP);但是這樣會有一個問題,就是頁面會滾動一下.使用者體驗不是很好,而且必須要在ScrollView完全渲染到螢幕上呼叫才會生效:
//將ScrollView移動到原點 <span style="white-space:pre"> </span>scrollView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { scrollView.post(new Runnable() { @Override public void run() { // scrollView.fullScroll(ScrollView.FOCUS_UP); } }); } });
方法2:把ScrollView裡的其他View獲取焦點:
View.setFocusable(true);
1.
View.setFocusableInTouchMode(
true
);
2.
View.requestFocus();
方法3:把GrideView或ListView焦點禁用:
grid.setFocusable(false);
方法3:重寫ScrollView的方法:(個人覺得比較合適)
1.
@Override
2.
//禁止scrollView內佈局變化後自動滾動
protected
int
computeScrollDeltaToGetChildRectOnScreen(Rect
rect) {
3.
return
0
;
5.
}