-
-
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.