当前位置: 移动技术网 > IT编程>移动开发>Android > Android 中 GridView嵌套在ScrollView里只有一行的解决方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

2014年江苏高考分数线,tcl集成灶,郑恩地

在做android项目中遇到一个bug,gridview嵌套在scrollview里只有一行的问题。下面小编在网上找到了解决方法,具体方法如下所示:

方法一:就是上面说的通过计算出来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(15, 15, 15, 15); 
listview.setlayoutparams(params);
}

方法二:重写gridview和listview的onmeasure方法,直接给它一个足够大的高度:

重写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:

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" />

以上所述是小编给大家介绍的android 中 gridview嵌套在scrollview里只有一行的解决方法,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网