Android 開發中一些不得不知的坑(二)
阿新 • • 發佈:2019-01-23
如何正確的在ScrollView裡做巢狀
日常開發中,經常會遇到ScrollView巢狀ListView,GridView或者是ViewPager,更有甚者是ScrollView巢狀ScrollView,這樣一來必然會導致一系列的問題,比如ListView顯示不全,滑動衝突等等。這裡就各種坑做一下總結。
巢狀的內容不可見
第一次遇見這種巢狀時,就是很單純的在ScrollView裡套了一個ListView,結果就是ListView只顯示一行,當時還一直以為是Adapter沒寫好,各種除錯,後來才想到這種巢狀的問題,各種百度之後解決,後來學聰明瞭,巢狀在ScrollView裡的控制元件,一般都需要繼續後自己動動手腳。
常見的解決辦法
- 重寫onMeasure方法
@Override
/** 重寫該方法,達到使ListView適應ScrollView的效果 */
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
還有一種情況是,ScrollView裡巢狀的ViewPager不可見了,除非將ViewPager高度設定成固定值,但在實際當中,這完全是不可取的,這個時候就需要給
- ScrollView設定屬性
:android:fillViewport=”true”
再有一種情況就是第一次進入介面時動態載入listview的items後頁面會跳轉到listview的第一個子項,這個問題其實特別令人無語,尤其當下應用都是多個Fragment切換,每次一次都會莫名其妙的跳轉到ListView的第一行。關於這個問題的解決方法是,在findViewByID獲取到這個ListView後,做如下處理;
- listView實現方法
listview.setFocusable(false);
好了,就下記下這些坑,以後遇到的繼續記。