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的实现的更多相关文章

  1. Extjs4 关于设置form中所有子控件为readOnly属性的解决方案

    之前在网上找了一堆,但那些确实没法用,后来考虑了一下,发现主要是网上提供的假设form中只有一层控件,没有考虑到布局稍微复杂的form情形,此处采用递归的形式实现对form中所有控件(grid及but ...

  2. 一个Activity掌握Design新控件 (转)

    原文地址:http://blog.csdn.net/lavor_zl/article/details/51295364 谷歌在推出Android5.0的同时推出了全新的设计Material Desig ...

  3. ArcGIS“一个或多个ActiveX控件无法显示...”问题的解决方案

    ArcMap启动时的一个警告信息“一个或多个ActiveX控件无法显示...”,如图 出现这种情况,有可能的原因是IE浏览器的安全选项设置被修改了.比如被手动修改过,或者被第三方系统杀毒优化软件修改了 ...

  4. 一个完善的ActiveX Web控件教程

    免费打工仔:一个完善的ActiveX Web控件教程 出自Ogre3D开放资源地带   跳转到: 导航, 搜索 原作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一 ...

  5. 缩放系列(二):所有子控件也随着缩放、手势缩放、多点触控layout

    下面是一个功能强大的改造的例子: 可以实现以下需求: 1.两个手指进行缩放布局 2.所有子控件也随着缩放, 3.子控件该有的功能不能丢失(像button有可被点击的功能,缩放后不能丢失该功能) 运行效 ...

  6. Qtp中一个或多个ActiveX控件无法显示问题

    今天在使用qtp进行登陆测试的时候,发现了一个问题,现总结归纳如下: [问题] 在测试过程中,一直提醒:一个或多个ActiveX控件无法显示,原因可能是下列其中之一: 如下图所示: [解决办法] 在Q ...

  7. 【VS开发】免费打工仔:一个完善的ActiveX Web控件教程

    作者 David Marcionek. 翻译 免费打工仔 这个教程可以帮助你快速开发一个ActiveX控件.其中将要讲解关于ActiveX开发的一些基础概念,诸如方法(method).属性(prope ...

  8. 创建一个带模版的用户控件 V.3

    再重构此篇<创建一个带模版的用户控件  V.2>http://www.cnblogs.com/insus/p/4164149.html 让其它动态实现header,Item和Footer. ...

  9. 创建一个带模版的用户控件 V.2

    前面有做练习<创建一个带模版的用户控件>http://www.cnblogs.com/insus/p/4161544.html .过于简化.通常使用数据控件Repeater会有网页写好He ...

随机推荐

  1. js javascript 模拟点击 超级链接点击 转

    转自:http://mo2g.com/view/42/ 我尝试过多次用jQuery模拟用户点击a标签的功能,但都没有成功,并且困扰了很久.前段时间的一次发呆,冒出了新的想法,于是就动手进行了测试. 先 ...

  2. 【必备】史上最全的浏览器 CSS & JS Hack 手册(转)

    浏览器渲染页面的方式各不相同,甚至同一浏览器的不同版本(“杰出代表”是 IE)也有差异.因此,浏览器兼容成为前端开发人员的必备技能.如果有一份浏览器 Hack 手册,那查询起来就方便多了.这篇文章就向 ...

  3. oracle with as

    http://blog.csdn.net/a9529lty/article/details/4923957/

  4. SortedSet有序集合类型

    SortedSet相当于C#中的SortDictionary类型,表示一个有序集合. 常用操作有,zadd命令将一个或多个元素及其score值加入到有序集key中. zrange命令返回有序集key中 ...

  5. POJ 3041 Asteroids 匈牙利算法,最大流解法,行列为点 难度:1

    http://poj.org/problem?id=3041 #include <cstdio> #include <cstring> #include <vector& ...

  6. PHP 函数(2)

    自定义函数: $name = "fakeface"; function dispalyName(){ echo "fakeface"; } function r ...

  7. Array 、 Dictionary 、 Object 3大数据结构 以及 for ... in for each的研究

    Array:存储方式-------索引存储 (要求key是大于等于0的整数) Dictionary.Object:存储方式---------索引存储 区别:可以说它们的 key 都 对应 各自的引用, ...

  8. OpenResty 安装及使用(第一篇安装)

    OpenResty搭建 1.openResty介绍 OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模 ...

  9. import和from import陷阱一

    #from datetime import datetime import datetime format="output-%Y-%m-%d-%H%M%S.txt" str=&qu ...

  10. Thrift 个人实战--Thrift 网络服务模型

    前言: Thrift作为Facebook开源的RPC框架, 通过IDL中间语言, 并借助代码生成引擎生成各种主流语言的rpc框架服务端/客户端代码. 不过Thrift的实现, 简单使用离实际生产环境还 ...