天天看點

《Android ScrollView嵌套GridView适配問題》

一、開發背景:當ScrollView裡面嵌套GridView或者ListView的時候,會出現GridView的高度無法自适應的問題:

《Android ScrollView嵌套GridView适配問題》

        就如上如這般,會出現同一個GridView無論用哪種顯示模式都會出現隻顯示三個圖的情況(隻顯示一行),剩下的三個需要通過手動的操作進行操作。而需求則是需要顯示全部的内容。

二、經過一番查找,處理方法有兩種:

(1)在listView.setAdapter()之後進行setListViewHeightBasedOnChildren(listView);

 public void setListViewHeightBasedOnChildren(ListView listView) {   
        // 擷取ListView對應的Adapter   
        ListAdapter listAdapter = listView.getAdapter();   
        if (listAdapter == null) {   
            return;   
        }   
   
        int totalHeight = 0;   
        for (int i = 0, len = listAdapter.getCount(); i < len; i++) {   
            // listAdapter.getCount()傳回資料項的數目   
            View listItem = listAdapter.getView(i, null, listView);   
            // 計算子項View 的寬高   
            listItem.measure(0, 0);    
            // 統計所有子項的總高度   
            totalHeight += listItem.getMeasuredHeight();    
        }   
   
        ViewGroup.LayoutParams params = listView.getLayoutParams();   
        params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));   
        // listView.getDividerHeight()擷取子項間分隔符占用的高度   
        // params.height最後得到整個ListView完整顯示需要的高度   
        listView.setLayoutParams(params);   
    }  
           

(2)自定義listView或者GridView

         代碼很簡單:

public class MyGridView extends GridView {
    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    //隻需要重寫該方法即可
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}
           

 然後使用GridView的時候,直接調用這個GirdView即可。