android requestDisallowInterceptTouchEvent的用途

ViewPager来实现左右滑动切换tab,如果tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比如想滑动tab项中的可水平滑动的控件,却导致tab切换。

因为Android事件机制是从父View传向子View的,可以去检测你当前子View是不是在有可滑动控件等,决定事件是否拦截,但是这个麻烦,而且并不能解决所有的问题(必须检测触摸点是否在这个控件上面),其实有比较简单的方法,在你嵌套的控件中注入ViewPager实例(调用控件的getParent()方法),然后在onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent里面告诉父View,也就是ViewPager不要拦截该控件上的触摸事件。

1 requestDisallowInterceptTouchEvent(true)

代码一般如下:

 1 public boolean onTouch(View v, MotionEvent event) {
 2     switch (event.getAction()) {
 3     case MotionEvent.ACTION_MOVE:
 4         pager.requestDisallowInterceptTouchEvent(true);
 5         break;
 6     case MotionEvent.ACTION_UP:
 7     case MotionEvent.ACTION_CANCEL:
 8         pager.requestDisallowInterceptTouchEvent(false);
 9         break;
10     }
11 }

当用户按下的时候,我们告诉父组件,不要拦截我的事件(这个时候子组件是可以正常响应事件的),拿起之后就会告诉父组件可以阻止。

时间: 2024-11-03 12:48:10

android requestDisallowInterceptTouchEvent的用途的相关文章

Android MimeType的用途以及所有类型

MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符.二进制格式附件等多种格式的邮件消息. 内容类型(Content-Type),这个头部领域用于指定消息的类型.一般以下面的形式出现.[type]/[subtype] type有下面的形式. Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的: Multipart:用于连接

android requestDisallowInterceptTouchEvent用途

ViewPager来实现左右滑动切换tab.假设tab的某一项中嵌入了水平可滑动的View就会让你有些不爽,比方想滑动tab项中的可水平滑动的控件,却导致tab切换. 由于Android事件机制是从父View传向子View的,能够去检測你当前子View是不是在有可滑动控件等,决定事件是否拦截.可是这个麻烦,并且并不能解决全部的问题(必须检測触摸点是否在这个控件上面),事实上有比較简单的方法,在你嵌套的控件中注入ViewPager实例(调用控件的getParent()方法),然后在onTouchE

android Bundle savedInstanceState用途

经常会出现用户按到home键,退出了界面,或者安卓系统意外回收了应用的进程,这种情况下,使用Bundle savedInstanceState就可以用户再次打开应用的时候恢复的原来的状态 (以下转自:http://blog.sina.com.cn/s/blog_6007ef940101fj8p.html) 写过Android程序的都知道Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是

Android中通过反射来设置显示时间

这个Toast的显示在Android中的用途还是很大的,同时我们也知道toast显示的时间是不可控的,我们只能修改他的显示样式和显示的位置,虽然他提供了一个显示时间的设置方法,但是那是没有效果的(后面会说到),他有两个静态的常量Toast.SHORT和Toast.LONG,这个在后面我会在源码中看到这个两个时间其实是2.5s和3s.那么我们如果真想控制toast的显示时间该怎么办呢?真的是无计可施了吗?天无绝人之路,而且Linux之父曾经说过:遇到问题就去看那个操蛋的源代码吧!!下面就从源代码开

Android Intent 教程

原文:Android: Intents Tutorial 作者:Darryl Bayliss 译者:kmyhy 人不会漫无目的地瞎逛,他们所做的大部分事情--比如看电视.购物.编写下一个杀手级 app -- 都带有特定的目的或者意图,即 intent. Android 也是同样的.在一个 app 干某件事情之前,它需要知道这件事情的目的或 intent,才能正确地完成整件事情. 这说明人和 Android 并无不同. 在本文,你将利用 Intent 去创建一个模因软件(一种用于恶搞的图片制作软件

Android API Guides---NFC Basics

本文档介绍了Android中执行基本任务NFC.它说明了如何在NDEF消息的形式发送和接收数据的NFC并介绍了支持这些功能的Andr??oid框架的API.对于更高级的主题,包括与非NDEF数据工作的讨论,请参阅高级NFC. 没有与NDEF数据和Android时两个主要用例: 从NFC标签读取NDEF数据 从一台设备喜气洋洋NDEF消息到另一个通过Android Beam? 从NFC标签读取NDEF数据与标签调度系统,其中分析发现NFC标签处理,适当地进行分类的数据,并启动一个应用程序,是感兴趣

Android 5.0 API

Android 5.0 API 在本文档中展开 更新目标 API 级别 重要的行为变更 界面 通知 图形 媒体 存储 无线和连接 Project Volta Android 在办公和教育中的应用 系统 打印框架 测试和辅助功能 IME 清单声明 API Differences API level 20 to 21 ? L Developer Preview to 21 ? See Also Android 5.0 Behavior Changes Android Lollipop Highlig

Android在ExpandableListView控制的基本使用

在本文中,Demo为了展示Android在ExpandableListView用途管制.如该组/儿子ListView绑定数据源. 直接上代码例如以下: 程序结构图: layout文件夹下的 main.xml 文件源代码例如以下: <? xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an

Android API Guides---App Manifest &lt;uses-feature&gt;

<uses-feature> 句法 <uses-feature   android:name="string"   android:required=["true" | "false"]   android:glEsVersion="integer" /> 包含于 <manifest> 描述: 声明所使用的应用程序的单个硬件或软件功能. 一个<用途特征>声明的目的是通知一套关于您