Android佈局中ScrollView與ListView的沖突的最簡單方法 – Android移動開發技術文章_手機開發 Android移動開發教學課程

看到網上流行的一種使用方法是
 
Java代碼 
public class Utility { 
        public static void setListViewHeightBasedOnChildren(ListView listView) { 
            ListAdapter listAdapter = listView.getAdapter();  
            if (listAdapter == null) { 
                // pre-condition 
                return; 
            } 
 
            int totalHeight = 0; 
            for (int i = 0; i < listAdapter.getCount(); i++) { 
                View listItem = listAdapter.getView(i, null, listView); 
                listItem.measure(0, 0); 
                totalHeight += listItem.getMeasuredHeight(); 
            } 
 
            ViewGroup.LayoutParams params = listView.getLayoutParams(); 
            params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() – 1)); 
            listView.setLayoutParams(params); 
        } 
    } 
 
這個太麻煩瞭,而且效果又不是很明顯。
 
有人的總結如下:
 
隻要在設置ListView的Adapter後調用此靜態方法即可讓ListView正確的顯示在其父ListView的ListItem中。但是要註意的是,子ListView的每個Item必須是LinearLayout,不能是其他的,因為其他的Layout(如RelativeLayout)沒有重寫onMeasure(),所以會在onMeasure()時拋出異常。
 
  在ScrollView中嵌套ListView(或者ScrollView)的另外一個問題就是,子ScrollView中無法滑動的(如果它沒有顯示完全的話),因為滑動事件會被父ScrollView吃掉,如果想要讓子ScrollView也可以滑動,隻能強行截取滑動事件,有牛人在論壇中發過代碼說可以。雖然我沒有親自試過,但估計是可行的。
  雖然在ScrollView中顯示ScrollView在技術上的難題可以攻破,但是這樣的設計卻是非常差的用戶體驗因為用戶會不容易看到和操作子ScrollView中的內容。比如好的設計是,父ListView的每個Item隻顯示概括性的描述,然後點擊其Item會進入另外一個頁面來詳細描述和展示以及對這個Item的操作。
 
於是找到另外兩種比較簡單的方法,而且又沒有影響的:
 
1.在ScrollView中添加一屬性 android:fillViewport="true" ,這樣就可以讓ListView全屏顯示瞭
2.指定ListView的高度 android:layout_height="420dp" ;

 

作者“mzba520”
 

發佈留言