在使用Android的ScrollView里面嵌套GridView时,设置android:layout_height="wrap_content"属性,运行界面的效果不会出现全部数据,即GridView会显示不全。
解决方法:重写GridView的onMeasure()方法,使其不会出现滚动条即可。
1 package com.example.gridview; 2 3 import android.content.Context; 4 import android.util.AttributeSet; 5 import android.widget.GridView; 6 7 public class MyGridView extends GridView { 8 9 public MyGridView(Context context) { 10 super(context); 11 } 12 13 public MyGridView(Context context, AttributeSet attrs) { 14 super(context, attrs); 15 } 16 17 public MyGridView(Context context, AttributeSet attrs, int defStyle) { 18 super(context, attrs, defStyle); 19 } 20 21 @Override 22 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 23 int expandSpec = MeasureSpec.makeMeasureSpec( 24 Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 25 super.onMeasure(widthMeasureSpec, expandSpec); 26 } 27 28 }
然后在布局文件里面引用重写的GridView控件。
1 <com.example.gridview.MyGridView 2 android:id="@+id/gv1" 3 android:layout_width="fill_parent" 4 android:layout_height="wrap_content" 5 android:background="@color/gv1" 6 android:columnWidth="@dimen/itemSize" 7 android:gravity="center" 8 android:horizontalSpacing="@dimen/horiz_spac" 9 android:numColumns="auto_fit" 10 android:scrollbarStyle="insideOverlay" 11 android:scrollbars="vertical" 12 android:stretchMode="columnWidth" 13 android:verticalSpacing="@dimen/vertc_space" />
最后设置Adapter即可。
1 package com.example.gridview; 2 3 import android.app.Activity; 4 import android.os.Bundle; 5 import android.widget.GridView; 6 7 public class MainActivity extends Activity { 8 9 @Override 10 protected void onCreate(Bundle savedInstanceState) { 11 super.onCreate(savedInstanceState); 12 setContentView(R.layout.grid_view); 13 14 GridView gv=(GridView)findViewById(R.id.gv1); 15 gv.setAdapter(new GridAdapter(this,R.layout.grid_item)); 16 } 17 }