Android 中 GridView嵌套在ScrollView里只有一行的解决方法
在做android项目中遇到一个bug,GridView嵌套在ScrollView里只有一行的问题。下面小编在网上找到了解决方法,具体方法如下所示:
方法一:就是上面说的通过计算出来ListView或者GridView中的子列高度和进行显示:
publicvoidsetListViewHeightBasedOnChildren(ListViewlistView){
ListAdapterlistAdapter=listView.getAdapter();
if(listAdapter==null){
return;
}
inttotalHeight=0;
for(inti=0;i<listAdapter.getCount();i++){
ViewlistItem=listAdapter.getView(i,null,listView);
listItem.measure(0,0);
totalHeight+=listItem.getMeasuredHeight();
}
ViewGroup.LayoutParamsparams=listView.getLayoutParams();
params.height=totalHeight+(listView.getDividerHeight()*(listAdapter.getCount()-1));
((MarginLayoutParams)params).setMargins(15,15,15,15);
listView.setLayoutParams(params);
}
方法二:重写GridView和ListView的onMeasure方法,直接给它一个足够大的高度:
重写ListView:
publicclassMyListViewextendsListView{
publicMyListView(Contextcontext){
//TODOAuto-generatedmethodstub
super(context);
}
publicMyListView(Contextcontext,AttributeSetattrs){
//TODOAuto-generatedmethodstub
super(context,attrs);
}
publicMyListView(Contextcontext,AttributeSetattrs,intdefStyle){
//TODOAuto-generatedmethodstub
super(context,attrs,defStyle);
}
@Override
protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
//TODOAuto-generatedmethodstub
intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec,expandSpec);
}
}
重写GridView:
publicclassMyGridViewextendsGridView{
publicMyGridView(Contextcontext,AttributeSetattrs){
super(context,attrs);
}
publicMyGridView(Contextcontext){
super(context);
}
publicMyGridView(Contextcontext,AttributeSetattrs,intdefStyle){
super(context,attrs,defStyle);
}
@Override
publicvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
intexpandSpec=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"/>
以上所述是小编给大家介绍的Android中GridView嵌套在ScrollView里只有一行的解决方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!