关于安卓View的setEnabled和setClickable的思考
来源:互联网 发布:剑灵秦夕妍捏脸数据 编辑:程序博客网 时间:2024/04/29 07:17
我们讲结合setOnClickListener和setOnTouchListener以及setEnabled和setClickable的相互影响。
以及View遮盖是否能穿透事件进行分析阐述。
首先我们搞一个布局:
<?xml version="1.0" encoding="utf-8"?><com.example.airy.click.R1 android:id="@+id/r1" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.airy.click.MainActivity"> <ImageView android:id="@+id/im1" android:background="#123123" android:layout_width="100dp" android:layout_height="100dp" /> <ImageView android:id="@+id/im2" android:alpha="0.5" android:background="#afd1c1" android:layout_width="200dp" android:layout_height="200dp" /></com.example.airy.click.R1>
m2位于m1的上层且比m1更大。两者都在一个自定义的R1 extends RelativeLayout中。
首先场景1
二者都注册setOnClickListener。结果是m2可以触发,m1不可以。这很简单。
场景2
如果我们不希望m2被点击,那么我们在场景1的基础上
imageView2.setEnabled(false);
我们测试发现,m2的点击不会触发,m1同样也不会。
场景3
imageView2.setClickable(false);
使用这种方式解除m2的点击,
我们测试发现m2所覆盖下的m1区域是可以被触发点击的。
实战场景
【如果我们需要上层覆盖VIEW不可被点击并且要将点击事件穿透下去,我们选用setClickable方法】
如果我们需要上层覆盖VIEW不可被点击并且不需要将点击事件穿透下去,我们选用setEnabled方法】
接下来
场景4
我们给m2追加注册setOnTouchListener事件。并且禁止setClickable
imageView2.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { showtoast("onTouch22"); return true; } }); imageView2.setClickable(false);
结果是如果OnTouchListener return ture那么事件会被m2吃掉。m1点击事件不会穿透,如果return false那么事件将会穿透m1会触发点击。但是对于m2的setOnTouchListener只能接受到一个down事件并不能接收到完整的事件序列。
场景5
基于场景4变为
imageView2.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { showtoast("onTouch22"); return true; } }); imageView2.setEnabled(false);
测试结果,无论retrun true和false,setOnClickListener和setOnTouchListener方法都不会被调用,m1也接受不到任何事件。
实战场景
【VIEW不可被点击并且setOnTouchListener不被调用且事件不穿透下去可以使用setEnabled】
知识点比较基础,但再项目实战中相对实用。从view事件分发的角度确实也可以解释这几个现象,最近博主也是在做一个广告浮层类似的东西总结出的经验和大家分享。
哪里可以找到我:
我的Github: https://github.com/AndroidMsky
我的博客主页: http://blog.csdn.net/androidmsky
欢迎加作者自营安卓开发交流群:
308372687
- 关于安卓View的setEnabled和setClickable的思考
- 菜鸟的安卓实习之路---- setClickable和setEnabled
- setClickable 和 setEnabled 的用法
- setEnabled() 和 setClickable() 的区别
- button的setClickable 和 setEnabled 区别
- setClickable,setEnabled,setFocusable 的区别
- android 控件的setClickable、setEnabled 、setFocusable
- 屏蔽Button setClickable和setEnabled
- android中setClickable,setEnabled,setFocusable的含义及区别
- 详解:setEnabled / setClickable / setFocusable 的用法 及 相关性
- android中setClickable,setEnabled,setFocusable的含义及区别
- setClickable(点击)、setEnabled(总开关)、setFocusable(焦点)的区别
- Android开发 屏蔽Button setClickable和setEnabled
- Android开发 屏蔽Button setClickable和setEnabled
- Android开发 屏蔽Button setClickable和setEnabled
- View.setClickable无效的问题
- android关于setenabled的问题
- setEnabled和setTouchEnabled的区别
- Cannot find module 'express'
- 手写softmax(numpy.stack hstack vstack)
- 算法学习1-递归
- Android中Activity的启动模式(LaunchMode)和使用场景
- Matlab的语言概述
- 关于安卓View的setEnabled和setClickable的思考
- Python爬虫-爬取豆瓣读书
- 北京网络赛
- IntelliJ IDEA:获取包路径下的xml文件,Could not find resource com/**/*.xml
- 2. Struts2框架概述
- mySQL5.6 新特性 快速预热Buffer_Pool缓冲池
- 【nyoj715】Adjacent Bit Counts
- [算法分析与设计] leetcode 每周一题: 053. Maximum Subarray
- C#回顾学习笔记三十四:接口