1. 程式人生 > >ScrollView巢狀GridView,ListView自動滾動到第一條Item的解決辦法

ScrollView巢狀GridView,ListView自動滾動到第一條Item的解決辦法

當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.}