今天在做项目的时候,遇到了一个问题,就是需要把一个常按监听事件,加到一个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 属性相关推荐

  1. 【错误记录】未安装该应用 ( 在 Android 12 之后 组件设置 android:exported=“false“ 属性 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 报错信息 : 点击应用图标后 , 应用并未启动 , 并弹出 " 未安装该应用 " 提示信息 ; 二.解决方案 排查了一下相关地方 ...

  2. AndroidManifest.xml中android:name功能介绍

    该博客转自https://blog.csdn.net/zeng622peng/article/details/78343443 大部分android程序员一把呢都是使用默认的Application,在 ...

  3. XML 中的 xmlns 等属性的意义

    原文:https://blog.csdn.net/lengxiao1993/article/details/77914155 Maven 是一个 java 开发人员很难绕过的构建工具, 因为有众多的开 ...

  4. Android下xml中RelativeLayout布局常见属性

    android:layout_above 将该控件的底部至于给定ID的控件之上 android:layout_below 将该控件的顶部至于给定ID的控件之下 android:layout_toLef ...

  5. GridView xml中设置android:focusable=false无效的原因

    最近Tv项目中有个小问题,需要gridview展示内容,但是不可获取焦点,于是xml中设置android:focusable="false",设想会成功,但是实际操作,发现还是可以 ...

  6. Spring配置文件applicationContext.xml中bean>>property>>name属性的含义

    Spring配置文件applicationContext.xml中bean>>property>>name属性表示的含义 首先我们知道property是bean元素的子元素,它 ...

  7. Android的一些属性使用

    android:marqueeRepeatLimit="marquee_forever" //表示用不停止滚动 android:descendantFocusability=&qu ...

  8. Android Studio中Button等控件的Text属性英文默认大写的解决方法

    在 Android Studio 中 xml 里面添加一个 Button.EditText 等控件后,它的 Text总是会显示大写,即使你输入的字符串是小写也不行,控制字符串大小写的属性是androi ...

  9. android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性

    android 自定义view属性 一个完美的自定义控件也可以添加xml来配置属性和风格.要实现这一点,可按照下列步骤来做: 1) 添加自定义属性到xml文件中 2) 在xml的中,指定属性的值 3) ...

最新文章

  1. 简述 OAuth 2.0 的运作流程
  2. CTF web总结--利用mysql日志getshell
  3. 删除链表的中间节点和a/b处的节点
  4. [SAP ABAP开发技术总结]动态语句、动态程序
  5. OpenPitrix 是一款开源多云应用程序管理系统
  6. SharePoint 2013 列表启用搜索
  7. echarts隐藏之后的显示问题
  8. linux设备驱动归纳总结(三):5.阻塞型IO实现【转】
  9. 【转载】KG-知识图谱初探
  10. Juniper SRX240 U盘升级junos
  11. pdfFactory和pdfFactory Pro有什么不同
  12. c语言水表程序流程图,水表检定操作流程图.pdf
  13. PLC可编程控制器实验装置
  14. built a JNCIS LAB系列:Chapter 1 Routing Policy Processing v1.0
  15. 一键生成IOS App Icon工具
  16. 五大浏览器的简单介绍
  17. pytorch(2)Tensor创建和获取tensor的size信息、torch.dtype、torch.device、torch.layout
  18. Apollo项目导航模式下的坐标转换研究
  19. EP Henry推出世界首批用二氧化碳固化的Solidia Concrete制造的预制产品
  20. rust矿洞绳子怎么爬下_rust矿洞绳子怎么爬 | 手游网游页游攻略大全

热门文章

  1. Hbase出现ERROR: Can‘t get master address from ZooKeeper; znode data == null解决办法
  2. JVM插桩之一:JVM字节码增强技术介绍及入门示例
  3. f450四轴使用技巧
  4. 把十进制转为二进制到16进制
  5. python3扫盲系列-(3)
  6. tensorflow综合示例3:对结构化数据进行分类:csv keras feature_column
  7. 构建并用 TensorFlow Serving 部署 Wide Deep 模型
  8. Ironport对邮件主题中包括特殊字符的过滤
  9. FullCalendar插件月视图正常显示周视图不正常显示问题解决方法
  10. GitStats:Git开发历史统计工具 - liyropt - 博客园