这个方法是触摸事件拦截机制的核心方法,官方文档解释的很详细,简单来说就是如果这个方法的返回值是 true,那么当前触摸事件就不会传递给子 View 控件(即被当前 ViewGroup 控件拦截并由当前...(MotionEvent e) 方法拦截这个触摸事件, 如果在传递的过程中被拦截了,那么久不会传递到这个 View/ViewGroup 上。...好了,下面通过例子来看一下: 建立一个Android 工程: 为了实现两个 ViewGroup 并且重写里面的事件拦截的三个方法,我们需要继承 ViewGroup,这里为了简单起见,笔者直接继承了一个...因而 LinearLayout 不能接收到触摸事件,它的 onTouchEvent 方法不会被调用。 好了,对于Android 事件分发拦截,总结起来就是: 先由外向里,再由里向外。...由外向里的过程中:onInterceptTouchEvent 方法(ViewGroup才有)的返回值决定是否拦截触摸事件(true:拦截,false:不拦截)。
一.键盘事件 onkeydown: 按下键盘时触发 onkeypress: 按下有值的键时触发 注意: onkeypress按下 Ctrl、Alt、Shift、Meta 这样无值的键,这个事件不会触发对于有值的键...,按下时先触发 keydown 事件,再触发这个事件 onkeyup:松开键盘时触发该事件 二.组合键 ctrl相关 alt相关 meta (Mac键盘是一个四瓣的小花,...//一般简写 window.onkeydown=function (e) { if (e.ctrlKey&&e.key == 'c'){console.log('ctrl+c')} } 三.拦截...preventDefault 比如拦截ctrl+h事件 window.onkeydown=function (e) { if (e.ctrlKey) {...,比如 Chrome CtrlN CtrlShiftN CtrlT CtrlShiftT CtrlW CtrlShiftW //没法拦截
1、修改一下BLOCKED_NUMBER这个变量值,把它设置为你要测试拦截的电话号码。 ...2、全部功能是在一个Activity里实现的,所以大家要先运行这个Activity,然后点击“设置呼叫转移”,设置好呼叫转移后,不要关闭这个Activity,关了就拦截不了电话了。...有心的朋友可以自己去写一个Service在后台运行拦截功能。...; import com.android.internal.telephony.ITelephony; /** * 演示如何设置呼叫转移,拦截电话(拦截后提示为空号...static int OP_CANCEL = 200; private final static String BLOCKED_NUMBER = "1892501xxxx";//要拦截的号码
settings, bool* no_javascript_access) = 0; browser 和 frame 分别代表当前浏览器实例和表示了在哪个 frame 触发的这个事件...target_frame_name 代表了目标要打开的地址和 frame 名称 target_disposition 描述了是从当前页还是从新标签中打开链接 user_gesture 如果用户手动点击 a 标签触发这个事件则该属性为...no_javascript_access 是否允许弹出的窗口使用 JS 脚本,如果为 false 则不允许使用并且与当前页面可能不在一个 render 进程中 当该函数返回 false 的时候,则允许弹出窗口,为 true 的时候就拦截掉不允许弹出了...但如果你点击的链接是一个不带 _blank 属性的链接,那么就需要下面的接口才能拦截到了。
从上表可以看到 Activity 和 View 都是没有事件拦截的,这是因为: Activity 作为原始的事件分发者,如果 Activity 拦截了事件会导致整个屏幕都无法响应事件,这肯定不是我们想要的效果...View最为事件传递的最末端,要么消费掉事件,要么不处理进行回传,根本没必要进行事件拦截。...那么对于view的事件处理。你已经懂了50%了。 事件分发和拦截 事件分发和拦截的流程其实就是上面那张图。《群英传》中举得例子很恰当。我们现在也对所有的流程对应一个职位: ?...,返回结果表示是否拦截事件。...参考文献 《Android群英传》 事件分发机制原理
1 WebView基本用法 WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限。...2 WebView拦截请求 WebView调用loadUrl后,会首先根据传入的URL获取响应,然后再将响应显示到页面上,这就是WebView的原理。...WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)方法中,该方法用于根据请求去获取响应,如果返回null,那么android...2.3注意 WebView中调用的每个请求都会经过那个拦截器,所以如果一个页面中又有超链接,那么依然会经过那个拦截器,所以上面Importnew中有些图片没有加载出来。因为我是以本文形式获取响应的。...所以特地研究了WebView拦截请求,不过最好是先判断要加载的URL是否是需要拦截的,如果不是的话,可以依然交给WebView去实现。
UIWebViewNavigationTypeLinkClicked){ NSString *url = [request.URL absoluteString]; //拦截链接跳转
Paste_Image.png ---- 前言 前面用到了 dispatchTouchEvent 和 onTouchEvent 分别表示 分发事件 和 触摸消费的事件 我们可以发现, Activity...; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import...; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import...Paste_Image.png 我们可以发现,界面上面没有点击效果 打印信息中也没有点击信息 说明,点击事件被拦截了 (通过前几篇,我们也可以知道,先获得TouchListener,再获得onTouchEvent...,再会有ClickListener, 现在拦截以后, 不会有对应的Touch事件了,更不会有Click事件了) ---- TouchEventChilds添加拦截 添加拦截后,对应的信息为: MainActivity
在Android系统中,手势的识别是通过 .OnGestureListener接口来实现的,利用,摸屏的Fling、Scroll等方法可以进行滑动或翻页效果的实现;触摸屏相关的事件,是通过onTouchListener...我们可以通过MotionEvent的getAction()方法来获取Touch事件的类型,包括 ACTION_DOWN, ACTION_MOVE, ACTION_UP, 和ACTION_CANCEL。...event); } @Override public boolean onTouch(View v, MotionEvent event) { // 根据触摸的事件来得到手势的事件...return mGestureDetector.onTouchEvent(event); //返回一个手势的事件 } 最后根据手势的事件实现Gesture的相应抽象方法,最重要的是
Android Touch事件分析 本文将分析Touch事件的传递。很多复杂的功能都需要深刻的处理Touch事件,例如侧边栏,例如图标的拖动换位。...消息传递的两种方式(Z轴方向) 前者是正在执行touch事件的方法,后者则是拦截touch事件的方法。...显然,拦截touch事件的前提是有可拦截的touch事件,即存在子view,所以只有ViewGroup才有OnInterceptTouchEvent()方法。...Case2:在Layout1,ACTION_DOWN时拦截(设置返回值为true)。 Log如下: 显然Layout1将touch事件拦截,使用自己的TouchEvent()处理。...Case3,如果不在ACTION_DOWN事件拦截,而在layout中的ACTION_MOVE事件拦截。
Android事件处理通常和控件相结合,通常有以下几种事件处理模型: (一)事件监听的处理模型 public voidonCreate(Bundle savedInstanceState) {...; } } 基于监听的事件处理模型步骤如下: 获取组件(事件源),也就是被监听的对象 实现事件监听器类,该类是一个特殊的Java类,必须实现一个XxxListener接口 调用事件源的...setXxxListener方法将事件监听器对象注册给事件源 (二)基于回调的事件处理 为了实现回调机制的事件处理,Android为所有GUI组件提供了一些事件处理方法,以View为例,该类包含如下方法...event) boolean onTrackballEvent(MotionEvent event) 所有基于回调的处理方法都有一个boolean类型的返回值,该返回值用于标识该处理方法是否能完全处理该事件...如果返回true,表明该处理方法已完全处理该事件,该事件不会传播出去 如果返回false,表明该处理方法并未完全处理该事件,该事件会传播出去 (三)响应的系统设置的事件 程序可调用Activity
等等之类的组件之间的交互问题…… 一经思考,你会发现Android中的Activity, Fragment, Service之间的交互是比较麻烦的,可能我们第一想到的是使用广播接收器来在它们之间进行交互...AndroidEventBus是一个Android平台轻量级的事件总线框架, 它简化了Activity、Fragment、Service等组件之间的交互,很大程度上降低了它们之间的耦合,使得我们的代码更加简洁...按照Android官方给的建议的解决方法如下: Communicating with the Activity,思路就是Activity实现某个接口,然后在Fragment-A关联上Activity之后将...当用户在某个地方发布一个事件时,事件总线根据事件的参数类型和tag找到对应的订阅者对象,最后执行订阅者对象中的方法。...,注册了该事件类型的对象就会接收到响应的事件.
SwipeRefreshLayout是Android自己支持库的下拉刷新控件,官方文档中提示,只有其包裹的孩子是RecyclerView、ListView、ScrollView等可滑动控件才能正常执行下拉刷新完整逻辑...如果是非滑动控件,比如我们会常用到Material Design设计风格中的CoordinatorLayout控件AppBarLayout结合RecyclerView的使用,下拉刷新就会出现拦截问题导致无法滑动列表...对于列表拦截冲突的解决方法,大致都是根据查看onInterceptTouchEvent方法里面的拦截机制,根据判断逻辑继承SwipeRefreshLayout类重写canChildScrollUp()来解决...,其实有个更简单粗暴的方法,直接按照自己的想要的滑动逻辑来设置是否拦截就可以了,上代码 public classAdvanceSwipeRefreshLayoutextendsSwipeRefreshLayout
由于触摸(Touch)而触发的事件 Android的事件:onClick, onScroll,onFling等等,都是由许多个Touch组成的。...一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。...而方法onTouchEvent(),用于接收事件并处理,它的返回值也是一个布尔值,决定了事件及后续事件是否继续向上传递,这个方法是从子View向父View传递。...对于android 自定义控件的事件 android提供了一个GestureDetector的类和GestureDetector.OnGestureListener的接口来判断用户在界面上做出怎么样的动作...Android里有两个类 android.view.GestureDetector android.view.GestureDetector.SimpleOnGestureListener (另外android.widget.Gallery
Android 监听系统短信有什么用?...1、对系统接收到的短信进行识别,是广告或者是诈骗等 2、对短信内容进行过滤或者是对内容进行提取,比如验证码提取 3、对系统短信进行拦截,连系统自己都不让收到了(不会出现在系统数据里面,也不会有系统短信的通知栏提示...1、系统短信广播为有序广播,要拦截的话,需要在注册广播的时候设置广播优先级为最大,不过这种也有风险,如果被其他的应用先拦截了,那么我们将不再收到,使用时需注意。...html 5、系统短信数据库也是通过监听短信广播的方式得到短信内容数据的,只是系统自己的东西它有默认权限允许,不担心因为权限问题收不到短信广播 第5点可以这样验证:自己写一个短信广播的接收者,把短信广播给拦截了...(intent); } // 如果需要拦截广播,调用下面语句 abortBroadcast(); } } public class SmsReceiverProcessor
android开发者每天都在问自己一个问题:我到底应该用哪个layout 然而GridLayout在当前开发中的情况如下: 大多数开发者并不知道这个布局 一些开发者知道GridLayout但是因为某些原因没有使用...然后计算你要多少列并通过android:columnCount属性定义,在我们的例子中我们有2列。
【工匠若水 http://blog.csdn.net/yanbober】 Notice:阅读完该篇之后如果想继续深入阅读Android触摸屏事件派发机制详解与源码分析下一篇请点击《Android触摸屏事件派发机制详解与源码分析二...就算你不自定义控件,你也必须要了解Android控件的触摸屏事件传递机制(之所以说触摸屏是因为该系列以触摸屏的事件机制分析为主,对于类似TV设备等的物理事件机制的分析雷同但有区别。...哈哈,谁让我之前是做Android TV BOX的,悲催!),只有这样才能将你的控件事件运用的如鱼得水。接下来的控件触摸屏事件传递机制分析依据Android 5.1.1源码(API 22)。...3 Android 5.1.1(API 22) View触摸屏事件传递源码分析 3-1 写在前面的话 其实Android源码无论哪个版本对于触摸屏事件的传递机制都类似,这里只是选用了目前最新版本的源码来分析而已...分析Android View事件传递机制之前有必要先看下源码的一些关系,如下是几个继承关系图: 怎么样?
前言 事件的分发是面试的必考题,也是Android作为一个移动系统,与用户交互的基础。由于整个事件分发比较繁杂,这里做一个总结,以作备忘。 事实上,Android系统中的事件分发机制是一个委托者模型。...三个方法 在Android的摸触事件中,我们通常关注的方法有三个。...onTouchEvent 在onTouchEvent中,Android实现了View的点击拖动等事件。...,因此,在dispatchTouchEvent中,ViewGroup需要优先考虑onInterceptTouchEvent,如果事件被拦截,则直接调onTouchEvent,如果未被拦截,就需要调用所有子...ViewGroup的onInterceptTouchEvent返回true,表示ViewGroup决定拦截这个事件。
Android事件分发 分析 什么是事件的 分发 用户通过屏幕与手机交互的时候,每一次点击、长按、移动等都是一个事件。...MainActivity extends AppCompatActivity { /** * ViewsGroup:dispatchTouchEvent * 1.去判断是否需要拦截事件...MainActivity extends AppCompatActivity { /** * ViewsGroup:dispatchTouchEvent * 1.去判断是否需要拦截事件....myapplication.MyScrollView> 运行 验证( ViewGroup事件拦截) 代码测试 MainActivity public class MainActivity...extends AppCompatActivity { /** * ViewsGroup:dispatchTouchEvent * 1.去判断是否需要拦截事件 *
Android的相关事件 1.Toast信息提醒 import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import...(R.layout.first_layout); // 获取按钮 Button button1 = (Button) findViewById(R.id.button_1); //点击事件...R.layout.first_layout); //获取按钮 Button button1 = (Button) findViewById(R.id.button_1); //点击事件...{ getMenuInflater().inflate(R.menu.main, menu); return true; } //定义菜单选项的点击事件...R.layout.first_layout); //获取按钮 Button button1 = (Button) findViewById(R.id.button_1); //点击事件
领取专属 10元无门槛券
手把手带您无忧上云