我的布局有expandablelistview。并且,每个子项目都有gridview。但是gridview有自己的滚动和expandablelistview也有。所以我必须为所有gridview设置固定长度,但有动态的网格视图数。
我从here找到了单个gridview的解决方案。
private OnGlobalLayoutListener mOnGlobalLayoutGridListener = new OnGlobalLayoutListener() {
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout() {
Debug.e("", "onGlobalLayout is called");
if (gridView != null && gridView.getChildCount() > 0) {
gridView.getViewTreeObserver().removeGlobalOnLayoutListener(
this);
// gridView.get
View lastChild = gridView
.getChildAt(gridView.getChildCount() - 1);
int rows = gridView.getAdapter().getCount() / numColumns;
int extra = gridView.getAdapter().getCount() % numColumns;
if (extra > 0) {
rows++;
}
int height = (int) (lastChild.getMeasuredHeight() * rows);
gridView.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, height));
}
}
};
OnGlobalLayoutListener
未引用特定的Gridview。所以我不能将这个监听器用于所有的网格视图,因为所有的网格视图都有不同数量的项目。
见这里
谁能帮助我吗? 提前谢谢。
答案 0 :(得分:0)
您可以使用这样的自定义GridView,然后您不必为所有gridview设置修复长度:
公共类GridlistView扩展了GridView {
public GridlistView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {
int expendSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expendSpec);
}
}
在xml中使用Gridlistview;