button-xml 中android:clickable=false 属性
今天在做项目的时候,遇到了一个问题,就是需要把一个常按监听事件,加到一个linearlayout中,但是,这个linearlayout中有其他的button、textview等控件,这样就导致当我们常按textview的时候,触发的是textview等子控件的常按事件。今天我们讨论的并不是如何解决这个问题,而是在解决这个问题的过程中,我遇到的android:clickable 跟 android:longClickable 这两个xml属性。
先看这两个属性在xml中的用法
<Buttonandroid:id="@+id/bt0"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="#ff0000"android:clickable="false"android:longClickable="false"android:text="long fasle" />
这两个属性有什么意义呢,我们看Button 中对这两个属性的处理
case com.android.internal.R.styleable.View_clickable:clickable = a.getBoolean(attr, clickable);break;case com.android.internal.R.styleable.View_longClickable:longClickable = a.getBoolean(attr, longClickable);break;} } a.recycle();setFocusable(focusable);setClickable(clickable);setLongClickable(longClickable);
我们很明白,它其实就是setClick 跟 setLongClick方法xml中的使用。
那么问题就来了。在代码里设置了上面两个属性为false,但当我在代码中给这这个按钮设置点击事件的时候,这两个点击事件仍然可以触发,而且似乎没有影响。后来我发现了问题所在。我们看一下
setOnClickListener 方法中到底做了什么事情
public void setOnClickListener(OnClickListener l) {if (!isClickable()) {setClickable(true);} getListenerInfo().mOnClickListener = l;}public void setOnLongClickListener(OnLongClickListener l) {if (!isLongClickable()) {setLongClickable(true);}getListenerInfo().mOnLongClickListener = l;}
我们很清除就知道了,之所以这两个属性设置没有效果,是因为,当我们给一个控件添加点击事件的时候,它们会重新把这个控件的clickable 属性进行设置。所以,如果我们想要禁掉一个控件的点击事件,我们必须是在点击事件以后使用
setLongClickable(false); setClickable(false)
方法
转载于:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_clickable_1583213.html
button-xml 中android:clickable=false 属性相关推荐
- 【错误记录】未安装该应用 ( 在 Android 12 之后 组件设置 android:exported=“false“ 属性 )
文章目录 一.报错信息 二.解决方案 一.报错信息 报错信息 : 点击应用图标后 , 应用并未启动 , 并弹出 " 未安装该应用 " 提示信息 ; 二.解决方案 排查了一下相关地方 ...
- AndroidManifest.xml中android:name功能介绍
该博客转自https://blog.csdn.net/zeng622peng/article/details/78343443 大部分android程序员一把呢都是使用默认的Application,在 ...
- XML 中的 xmlns 等属性的意义
原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...
- Android下xml中RelativeLayout布局常见属性
android:layout_above 将该控件的底部至于给定ID的控件之上 android:layout_below 将该控件的顶部至于给定ID的控件之下 android:layout_toLef ...
- GridView xml中设置android:focusable=false无效的原因
最近Tv项目中有个小问题,需要gridview展示内容,但是不可获取焦点,于是xml中设置android:focusable="false",设想会成功,但是实际操作,发现还是可以 ...
- Spring配置文件applicationContext.xml中bean>>property>>name属性的含义
Spring配置文件applicationContext.xml中bean>>property>>name属性表示的含义 首先我们知道property是bean元素的子元素,它 ...
- Android的一些属性使用
android:marqueeRepeatLimit="marquee_forever" //表示用不停止滚动 android:descendantFocusability=&qu ...
- Android Studio中Button等控件的Text属性英文默认大写的解决方法
在 Android Studio 中 xml 里面添加一个 Button.EditText 等控件后,它的 Text总是会显示大写,即使你输入的字符串是小写也不行,控制字符串大小写的属性是androi ...
- android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性
android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...
最新文章
- 简述 OAuth 2.0 的运作流程
- CTF web总结--利用mysql日志getshell
- 删除链表的中间节点和a/b处的节点
- [SAP ABAP开发技术总结]动态语句、动态程序
- OpenPitrix 是一款开源多云应用程序管理系统
- SharePoint 2013 列表启用搜索
- echarts隐藏之后的显示问题
- linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
- 【转载】KG-知识图谱初探
- Juniper SRX240 U盘升级junos
- pdfFactory和pdfFactory Pro有什么不同
- c语言水表程序流程图,水表检定操作流程图.pdf
- PLC可编程控制器实验装置
- built a JNCIS LAB系列:Chapter 1 Routing Policy Processing v1.0
- 一键生成IOS App Icon工具
- 五大浏览器的简单介绍
- pytorch(2)Tensor创建和获取tensor的size信息、torch.dtype、torch.device、torch.layout
- Apollo项目导航模式下的坐标转换研究
- EP Henry推出世界首批用二氧化碳固化的Solidia Concrete制造的预制产品
- rust矿洞绳子怎么爬下_rust矿洞绳子怎么爬 | 手游网游页游攻略大全
热门文章
- Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
- JVM插桩之一:JVM字节码增强技术介绍及入门示例
- f450四轴使用技巧
- 把十进制转为二进制到16进制
- python3扫盲系列-(3)
- tensorflow综合示例3:对结构化数据进行分类:csv keras feature_column
- 构建并用 TensorFlow Serving 部署 Wide Deep 模型
- Ironport对邮件主题中包括特殊字符的过滤
- FullCalendar插件月视图正常显示周视图不正常显示问题解决方法
- GitStats:Git开发历史统计工具 - liyropt - 博客园