今天在做一个项目的时候,Activity里放了好几个GridView,导致页面很高,所以需要用SrollView进行滑动,这个时候问题出来了。首先是编译器给出了警告:The vertically scrolling ScrollView should not contain another vertically scrolling widget (GridView),意思就是在ScrollView中不能嵌套具有滑动特性的View,系统无法判断该哪个控件获取滚动焦点,会导致GridView无法滑动,高度显示也有问题。其实按照android的标准,是不允许这样做的,但是为了布局方便,不得不采用这种抄捷径的方式来实现。
既然知道问题了,那么肯定就有相应的解决方案,第一反应肯定就是自定义GridView了,重写GridView,让其失去滑动的特性。
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.MotionEvent;
- import android.widget.GridView;
- public class MenuGridView extends GridView {
- public MenuGridView(Context context) {
- super(context);
- }
- public MenuGridView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- public MenuGridView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
- @Override
- public boolean dispatchTouchEvent(MotionEvent ev) {
- if(ev.getAction() == MotionEvent.ACTION_MOVE){
- return true;
- }
- return super.dispatchTouchEvent(ev);
- }
- }
OK!大功告成!