在ScrollView中嵌套GridView,导致GridView不能滑动的问题
来源:互联网 发布:知乎童谣事件原文 编辑:程序博客网 时间:2024/06/04 12:43
在Android开发中,有时根据需要,会在ScrollView中添加GridView,这问题也纠结了好一会,网上查的也对不上,如:
<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:descendantFocusability="afterDescendants" android:id="@+id/scrollView"> <LinearLayout android:id="@+id/pictrue_layout" android:orientation="vertical" android:gravity="center_horizontal" android:descendantFocusability="afterDescendants" android:layout_width="fill_parent" android:layout_height="wrap_content"> <GridView android:layout_width="wrap_content" android:layout_height="wrap_content"> </GridView> </LinearLayout> </ScrollView>
但是在运行以后,发现GridView不能正常滑动,也就是不能根据手势进行滑动了,导致这个问题的原因,在android开发中,程序运行以后;在接收到事件,那么Activity会把接收到的事件优先分发到最上层的View中,在上面的代码中,分发的顺序就是ScollView,如果ScollView没有接收,那么下一个分发的是LinearLayout,只有当上层的所有View都不接收事件时,最下层的View才能接收到事件。上面的GridView不能接收就是因为事件被ScrollView接收了。
解决的办法是让上面的所有的View将事件优先分发到最下层的View,由于上面的LinearLayout不处理事件,所以我们只要将ScrollView的事件优先分发到GridView即可,处理方法就是重写ScrollView里面的部分事件处理方法,方法说明如下:
1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent
2)public boolean onInterceptTouchEvent(MotionEvent ev) 这个方法用来拦截TouchEvent
3)public boolean onTouchEvent(MotionEvent ev) 这个方法用来处理TouchEvent
由此我们只需要重写onInterceptTouchEvent(MotionEvent ev)方法即可,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,如果子View返回false,那么在递归返回到最上层的View自行处理,最后会丢弃改事件。同时在创建GridView的时候,让起其能直接获得焦点效果会好点。
解决代码是:
<com.x.BaseScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:descendantFocusability="afterDescendants" android:id="@+id/scrollView"> <LinearLayout android:id="@+id/pictrue_layout" android:orientation="vertical" android:gravity="center_horizontal" android:descendantFocusability="afterDescendants" android:layout_width="fill_parent" android:layout_height="wrap_content"> <GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:focusable="true"> </GridView> </LinearLayout> </com.x.BaseScrollView>重写ScrollView:
/** * Created by lingo on 14-12-1. */public class BaseScrollView extends ScrollView{ public BaseScrollView(Context context) { super(context); } public BaseScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; }}这样GridView就能在ScrollView里面进行滑动了,当然了如果在GridView处于全屏状态下,那么ScrollView就永远接收不到滑动事件,所以根据具体的情况处理。
- 在ScrollView中嵌套GridView,导致GridView不能滑动的问题
- ScrollView中嵌套ListView/GridView导致的问题总结
- 在scrollview中嵌套GridView遇到的问题
- 在scrollview中嵌套多个GridView,GridView的内容不能显示全,只显示一部分
- 解决ScrollView中嵌套ListView或GridView导致的ScrollView自动滚动到ListView或GridView位置的问题
- ScrollView嵌套ListView和GridView不能全部显示的问题
- 解决ScrollView嵌套ViewPager,导致ViewPager不能滑动的问题
- ScrollView中若嵌套有滑动的控件(如:WebView,ListView或GridView)焦点问题
- GridView嵌套在ViewPager中,ViewPager嵌套在ScrollView中,GridView显示不全问题
- ScrollView中嵌套ListView或者GridView时的滑动冲突 || ListView中嵌套GridView,GridView只显示一行的问题解决
- 解决scrollView中嵌套编辑框导致不能上下滑动的问题
- 解决scrollView中嵌套编辑框导致不能上下滑动的问题
- Android ScrollView嵌套ListView/GridView 导致进入界面定位到ListView/GridView的问题
- Android ScrollView嵌套ListView/GridView 导致进入界面定位到ListView/GridView的问题
- Android ScrollView嵌套ListView/GridView 导致进入界面定位到ListView/GridView的问题
- Android: 如何在ScrollView中嵌套GridView
- Android 中 ScrollView 内嵌套 GridView问题
- 【问题汇总】ScrollView嵌套GridView的问题
- 在Ubuntu 13.04下安装 OpenGL过程记录。
- Hibernate Hql
- Android中的一些常用属性
- shell中反引号、单引号、双引号的使用
- Java循环遍历输出map方法
- 在ScrollView中嵌套GridView,导致GridView不能滑动的问题
- 理解Ceph CRUSH数据定位算法
- 算法:三阶矩阵求逆矩阵算法公式
- [Web]URL编码与解码
- 五个常见开机不能完成自检的原因
- Java中Ear、Jar、War文件之间的比较
- java io详解
- 生成MyEclipse注册码以及激活MyEclipse注册码
- 视频流中的DTS/PTS到底是什么?