当GridView嵌套在ScrollView里时,发现GridView只显示了一行。这是因为GridView有自己的滚动条,而ScrollView也有自己的滚动条,两者发生了冲突。
解决方法是重写GridView的OnMesure方法,使其不再出现滚动条。
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
onMeasure()方法的一些解释:
MeasureSpc类封装了父View传递给子View的布局(layout)要求。
static int makeMeasureSpec(int size,int mode) : 根据提供的大小值和模式,创建一个测量值(格式)
然后在布局文件中加入MyGridView就行。
<com.example.administrator.calendartest.MyGridView
android:id="@+id/myGridView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="4"
</com.example.administrator.calendartest.MyGridView>