今天遇到了这样的界面 一看就是用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 });