Android中的ScrollView里的GridView问题

我想我把GridView里面的ScrollView在android中。 当我把GridView不起作用。

这是布局。

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/scroll_home" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:id="@+id/layout_home" android:layout_width="wrap_content" android:layout_height="wrap_content"> <GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/programacao_grid" android:numColumns="auto_fit" android:gravity="center" android:columnWidth="50dp" android:stretchMode="columnWidth" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/calendario_programacao" > </GridView> </RelativeLayout> </ScrollView> 

经过多次searchfind了答案,下面是

search后,我发现这个项目的链接 : –

ExpandableHeightGridView

 package xx.xxx.xx.view; import android.content.Context; import android.util.AttributeSet; import android.view.ViewGroup; import android.widget.GridView; public class ExpandableHeightGridView extends GridView { boolean expanded = false; public ExpandableHeightGridView(Context context) { super(context); } public ExpandableHeightGridView(Context context, AttributeSet attrs) { super(context, attrs); } public ExpandableHeightGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public boolean isExpanded() { return expanded; } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // HACK! TAKE THAT ANDROID! if (isExpanded()) { // Calculate entire height by providing a very large height hint. // View.MEASURED_SIZE_MASK represents the largest height possible. int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); ViewGroup.LayoutParams params = getLayoutParams(); params.height = getMeasuredHeight(); } else { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } } public void setExpanded(boolean expanded) { this.expanded = expanded; } } 

layout.xml文件:

 <ScrollView android:id="@+id/sc_spots" android:layout_width="match_parent" android:layout_height="wrap_content" android:fillViewport="true" > <xx.xxx.xx.view.ExpandableHeightGridView android:id="@+id/spotsView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="15dp" android:layout_marginBottom="15dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" android:horizontalSpacing="10dp" android:isScrollContainer="false" android:numColumns="5" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /> </ScrollView> 

使用GridView

 mGridView = (ExpandableHeightGridView) getView().findViewById(R.id.spotsView); mGridView.setExpanded(true); SpotsAdapter adapter = new SpotsAdapter(getActivity(),R.layout.spot_item,params); mGridView.setAdapter(adapter); adapter.notifyDataSetChanged(); 

这对我有用

  // Setting on Touch Listener for handling the touch inside ScrollView gridView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { v.getParent().requestDisallowInterceptTouchEvent(true); return false; } });