今天遇到了这样的界面 一看就是用ScrollView嵌套GridView最好处理了,也可以用ScrollView那样就麻烦了,我知道ScrollView嵌套GridView或ListView会有问题

所以从网上差了一下资料,其实很简单就是重新GridView或ListView的onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法 附上代码:

 1 public class MyGridView extends GridView { 
 2     public MyGridView(Context context, AttributeSet attrs) { 
 3         super(context, attrs); 
 4     } 
 5 
 6     public MyGridView(Context context) { 
 7         super(context); 
 8     } 
 9 
10     public MyGridView(Context context, AttributeSet attrs, int defStyle) { 
11         super(context, attrs, defStyle); 
12     } 
13 
14     @Override 
15     public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
16 
17         int expandSpec = MeasureSpec.makeMeasureSpec( 
18                 Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
19         super.onMeasure(widthMeasureSpec, expandSpec); 
20     } 
21 } 

这样就可以解决滑动冲突的问题了,因为重写的这个方法就是把GridView的滑动去掉了。但是你会发现这个问题解决了下一个问题就来了,他会默认GridView显示在最上面,

需要在Activity的 onWindowFocusChanged(boolean hasFocus) 添加 scrollview.scrollTo(0, 0); 至于为什么不添加到onCreate和onStart中你就需要自己去了解一下

Activity的每个生命周期方法了。

1 public void onWindowFocusChanged(boolean hasFocus)
2     {
3         scrollview.scrollTo(0, 0);
4         super.onWindowFocusChanged(hasFocus);
5     }

 从网上搜上的解决方案:

1 scrollView.post(new Runnable()
2         {
3             @Override
4             public void run()
5             {
6                 scrollView.fullScroll(ScrollView.FOCUS_UP);
7             }
8         });