如何正確的在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);
好了,就下記下這些坑,以後遇到的繼續記。