-
-
Save sakurabird/6868765 to your computer and use it in GitHub Desktop.
| package xx.xxx.xx.view; | |
| import android.content.Context; | |
| import android.util.AttributeSet; | |
| import android.view.ViewGroup; | |
| import android.widget.GridView; | |
| /** | |
| * ScrollViewの中のGridViewでも高さを可変にする<br> | |
| * http://stackoverflow.com/questions/8481844/gridview-height-gets-cut | |
| */ | |
| 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; | |
| } | |
| } |
| <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> |
| 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(); |
how to use two gridviews inside scrollview but gridview should contain header and footer
The problem is that You must set allways the LayoutParams as a parent of children is.
Example:
CardView inside LinearLayout should call setLayoutParams(new LinearLayout.LayoutParams(...))
Thats logic, right?
try to override function with instanceof, example :
if(getLayoutParams() != null) && (getLayoutParams() instanceof LinearLayoutParams) { ... }
I know this is most ugliest code, say thanx to private & final properties & methods of google team
I'm having trouble with this view on Kindle Fire. On my regular Android device, I can see the whole grid view, but on Kindle Fire, the bottom 5-10% gets clipped off, and I can't scroll further to see it all. I imagine this is a difference in screen measuring, but I don't know enough about it to figure out how to fix it. Any ideas?
I am getting null pointer exception :Attempt to invoke virtual method 'void ExpandableHeightGridView.setExpanded(boolean)' on a null object reference.
Please help.
any solution for onscroll change listener.
I could not detected onscroll change listener.