ScrollView嵌套GridView踩坑

2016-09-30  本文已影响398人  Qsy_Zer0

GridView显示不完全--->解决方法
1.用RecyclerView
2.自定义GridView,重写onMeasure()方法

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
super.onMeasure(widthMeasureSpec, expandSpec); 
}

选用解决方法2然后会发现GridView 在当前界面中(只要有一部分在屏幕中即会触发)导致 ScrollView根据GridView位置发生相对滚动--->解决方案
1.topView.requestFocus();//顶部view获取焦点
2.gridView.setFocusable(false); //让GridView不能获得焦点(xml中设置无效)
3.scrollView.scrollTo(0,0)//注意使用时机,感觉很傻直接没试
原因应该是
scrollToChild根据computeScrollDeltaToGetChildRectOnScreen的返回值来计算滚动的位置
重载computeScrollDeltaToGetChildRectOnScreen让其返回0 会导致ScrollView内布局产生变化时,不能正确滚动到focus child位置
当然你不需要这个功能的话 重载computeScrollDeltaToGetChildRectOnScreen也可以
computeScrollDeltaToGetChildRectOnScreen大致是 根据当前 scrollY和focus child 的 rect.bottom 去计算要滚到哪

上一篇下一篇

猜你喜欢

热点阅读