源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Android 中 GridView嵌套在ScrollView里只有一行的解决方法

  • 时间:2021-09-16 11:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android 中 GridView嵌套在ScrollView里只有一行的解决方法
在做android项目中遇到一个bug,GridView嵌套在ScrollView里只有一行的问题。下面小编在网上找到了解决方法,具体方法如下所示: [b]方法一:就是上面说的通过计算出来ListView或者GridView中的子列高度和 进行显示:[/b]
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(15, 15, 15, 15); 
listView.setLayoutParams(params);
}
[b]方法二:重写GridView和ListView的onMeasure方法,直接给它一个足够大的高度:[/b] [b]重写ListView:[/b]
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); 
} 
}
[b]重写GridView:[/b]
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); 
} 
}
[b]xml中的布局:[/b]
<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" />
以上所述是小编给大家介绍的Android 中 GridView嵌套在ScrollView里只有一行的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程素材网网站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部