android ScrollView中嵌套GridView,ListView只显示一行的解决办法

本文提供两种解决ListView中嵌套GridView显示不全的方法:一是重写ListView和GridView类;二是通过计算ListView或GridView子项的高度总和来调整其高度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:
http://blog.youkuaiyun.com/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);    
}   

此方案,本人未测试!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值