【Android】ScrollView+GridView 显示问题

在使用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 }
原文地址:https://www.cnblogs.com/zengweiming/p/3314021.html