scrollview和listview或者gridview的冲突
在scrollview中嵌套listview或者gridview时
如果listview或者gridview的高度时wrap-content会导致两者只显示一行多一点
原因:
listview和gridview都继承于scrollview 两个scrollview嵌套会导致高度有问题。
核心解决方案:
重写listview和gridview的onMeasure方法 如下:
packagecome.cake.customview;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.MotionEvent;importandroid.widget.ListView;/***Createdbyappleon16/1/20.*/publicclassMyListViewextendsListView{publicMyListView(Contextcontext,AttributeSetattrs){super(context,attrs);}publicMyListView(Contextcontext){super(context);}publicMyListView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec,expandSpec);}@OverridepublicbooleandispatchTouchEvent(MotionEventev){if(ev.getAction()==MotionEvent.ACTION_MOVE){returntrue;//禁止listview进行滑动}returnsuper.dispatchTouchEvent(ev);}}
packagecome.cake.customview;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.MotionEvent;importandroid.widget.GridView;publicclassMyGridViewextendsGridView{publicMyGridView(Contextcontext,AttributeSetattrs){super(context,attrs);}publicMyGridView(Contextcontext){super(context);}publicMyGridView(Contextcontext,AttributeSetattrs,intdefStyle){super(context,attrs,defStyle);}@OverridepublicbooleandispatchTouchEvent(MotionEventev){if(ev.getAction()==MotionEvent.ACTION_MOVE){returntrue;//禁止Gridview进行滑动}returnsuper.dispatchTouchEvent(ev);}@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec,expandSpec);}}gridView.setFocusable(false);//scrollview内部嵌套gridview防止从底部显示,加上这行代码就会从头部显示
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。