一个可以设置所有子控件是否可以点击的Layout的实现
http://www.cnblogs.com/csonezp/p/4956315.html
最近在做一个功能,想在某个状态设置整个界面不可点击,后台任务执行完毕后再可以点击。
最直观的想法是直接让所有子控件设置enable为false,但是子控件太多了,这个不太现实。
然后想直接让父控件disenable,发现子控件还是能接收到点击事件。
又给父layout设置onClickListener,然后不做任何操作,依旧无果。在网上咨询了一些人,给我的建议是去了解一些android的事件分发机制,然后再自己重写一下父控件。
于是我就找到了郭林大神的这两篇博文:
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153747
看了以后受益匪浅。如果对事件分发不了解的可以去看看,一定会有所收获。
按照大大的博文,我自己重写了一个LinearLayout,里面重写了onInterceptTouchEvent,添加了一个新方法setChildClickable,调用这个方法就可以设置所有子类可点击/不可点击。代码如下,有需要的可以参考一下。
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout; /**
* Created by csonezp on 15-11-11.
* 可以直接控制所有子控件是否可点击的LinearLayout
*/
public class ChildClickableLinearLayout extends LinearLayout {
//子控件是否可以接受点击事件
private boolean childClickable = true; public ChildClickableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
} public ChildClickableLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
} @TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ChildClickableLinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
} public ChildClickableLinearLayout(Context context) {
super(context);
} @Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
//返回true则拦截子控件所有点击事件,如果childclickable为true,则需返回false
return !childClickable;
} public void setChildClickable(boolean clickable) {
childClickable = clickable;
} }
然后就像正常LinearLayout一样使用这个控件就可以了。在需要的时候调用一下setChildClickable,参数为true则所有子控件可以点击,false则不可点击。
一个可以设置所有子控件是否可以点击的Layout的实现的更多相关文章
- Extjs4 关于设置form中所有子控件为readOnly属性的解决方案
之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设form中只有一层控件,没有考虑到布局稍微复杂的form情形,此处采用递归的形式实现对form中所有控件(grid及but ...
- 一个Activity掌握Design新控件 (转)
原文地址:http://blog.csdn.net/lavor_zl/article/details/51295364 谷歌在推出Android5.0的同时推出了全新的设计Material Desig ...
- ArcGIS“一个或多个ActiveX控件无法显示...”问题的解决方案
ArcMap启动时的一个警告信息“一个或多个ActiveX控件无法显示...”,如图 出现这种情况,有可能的原因是IE浏览器的安全选项设置被修改了.比如被手动修改过,或者被第三方系统杀毒优化软件修改了 ...
- 一个完善的ActiveX Web控件教程
免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...
- 缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout
下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像button有可被点击的功能,缩放后不能丢失该功能) 运行效 ...
- Qtp中一个或多个ActiveX控件无法显示问题
今天在使用qtp进行登陆测试的时候,发现了一个问题,现总结归纳如下: [问题] 在测试过程中,一直提醒:一个或多个ActiveX控件无法显示,原因可能是下列其中之一: 如下图所示: [解决办法] 在Q ...
- 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程
作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一个ActiveX控件.其中将要讲解关于ActiveX开发的一些基础概念,诸如方法(method).属性(prope ...
- 创建一个带模版的用户控件 V.3
再重构此篇<创建一个带模版的用户控件 V.2>http://www.cnblogs.com/insus/p/4164149.html 让其它动态实现header,Item和Footer. ...
- 创建一个带模版的用户控件 V.2
前面有做练习<创建一个带模版的用户控件>http://www.cnblogs.com/insus/p/4161544.html .过于简化.通常使用数据控件Repeater会有网页写好He ...
随机推荐
- js javascript 模拟点击 超级链接点击 转
转自:http://mo2g.com/view/42/ 我尝试过多次用jQuery模拟用户点击a标签的功能,但都没有成功,并且困扰了很久.前段时间的一次发呆,冒出了新的想法,于是就动手进行了测试. 先 ...
- 【必备】史上最全的浏览器 CSS & JS Hack 手册(转)
浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技能.如果有一份浏览器 Hack 手册,那查询起来就方便多了.这篇文章就向 ...
- oracle with as
http://blog.csdn.net/a9529lty/article/details/4923957/
- SortedSet有序集合类型
SortedSet相当于C#中的SortDictionary类型,表示一个有序集合. 常用操作有,zadd命令将一个或多个元素及其score值加入到有序集key中. zrange命令返回有序集key中 ...
- POJ 3041 Asteroids 匈牙利算法,最大流解法,行列为点 难度:1
http://poj.org/problem?id=3041 #include <cstdio> #include <cstring> #include <vector& ...
- PHP 函数(2)
自定义函数: $name = "fakeface"; function dispalyName(){ echo "fakeface"; } function r ...
- Array 、 Dictionary 、 Object 3大数据结构 以及 for ... in for each的研究
Array:存储方式-------索引存储 (要求key是大于等于0的整数) Dictionary.Object:存储方式---------索引存储 区别:可以说它们的 key 都 对应 各自的引用, ...
- OpenResty 安装及使用(第一篇安装)
OpenResty搭建 1.openResty介绍 OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模 ...
- import和from import陷阱一
#from datetime import datetime import datetime format="output-%Y-%m-%d-%H%M%S.txt" str=&qu ...
- Thrift 个人实战--Thrift 网络服务模型
前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...