android ScrollView中嵌套GridView,ListView只顯示一行的解決辦法

原文地址:
http://blog.csdn.net/young0325/article/details/9831587

注:本文是由網上大神分享的解決方案彙集而成

方法一:

重寫ListView、GridView:

重寫ListView:

public class MyListView extends ListView {  
  
    public MyListView(Context context) {  
        // TODO Auto-generated method stub  
        super(context);  
    }  
  
    public MyListView(Context context, AttributeSet attrs) {  
        // TODO Auto-generated method stub  
        super(context, attrs);  
    }  
  
    public MyListView(Context context, AttributeSet attrs, int defStyle) {  
        // TODO Auto-generated method stub  
        super(context, attrs, defStyle);  
    }  
  
    @Override  
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
        // TODO Auto-generated method stub  
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,  
                MeasureSpec.AT_MOST);  
        super.onMeasure(widthMeasureSpec, expandSpec);  
    }  
}  
重寫GridView:

/** 
 * 自定義gridview,解決ListView中嵌套gridview顯示不正常的問題(1行半) 
 * @author wangyx 
 * @version 1.0.0 2012-9-14 
 */  
public class MyGridView extends GridView{  
      public MyGridView(Context context, AttributeSet attrs) {   
            super(context, attrs);   
        }   
       
        public MyGridView(Context context) {   
            super(context);   
        }   
       
        public MyGridView(Context context, AttributeSet attrs, int defStyle) {   
            super(context, attrs, defStyle);   
        }   
       
        @Override   
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
       
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,   
                    MeasureSpec.AT_MOST);   
            super.onMeasure(widthMeasureSpec, expandSpec);   
        }   
}  

xml中的佈局:

<com.xxx.MyGridView   
             android:id="@+id/mygridview"   
             android:layout_width="fill_parent"   
             android:layout_height="wrap_content"   
             android:gravity="center"   
             android:horizontalSpacing="5dp"   
             android:numColumns="4"   
             android:stretchMode="columnWidth"   
             android:verticalSpacing="6dp" />   
此方案親測有效。

方法二:通過計算出來ListView或者GridView中的子列高度和 進行顯示:

public void setListViewHeightBasedOnChildren(ListView listView) {    
    ListAdapter listAdapter = listView.getAdapter();     
    if (listAdapter == null) {    
        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));    
    ((MarginLayoutParams)params).setMargins(10, 10, 10, 10);  
    listView.setLayoutParams(params);    
}   

此方案,本人未測試!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章