android:clickable=“false“无效,依然能被点击

这篇具有很好参考价值的文章主要介绍了android:clickable=“false“无效,依然能被点击。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

android:clickable=“false”依然能被点击,该属性意义何在?

在Android中,android:clickable 属性用于指定一个视图(View)是否可以被点击。当你设置 android:clickable="true" 时,表示该视图可以接受点击事件;相反,如果设置为 android:clickable="false",则表示该视图不应该接收点击事件。

然而,即使你将 TextViewandroid:clickable 设置为 "false",如果你在代码中为这个 TextView 设置了点击事件监听器,它仍然会响应点击事件。这是因为在你给 TextView 添加了点击事件监听器之后,内部的点击状态会被改变以便能够接收并响应点击事件。

例如:

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click Me!"
    android:clickable="false" />

然后在代码中:

TextView textView = findViewById(R.id.textView);
textView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // 响应点击事件
    }
});

尽管XML中 clickable 被设置为 "false",但由于添加了点击事件监听器,TextView 还是可以响应点击操作。

从Android框架的设计角度来看,这样做是有意义的,因为开发人员可能想要有条件地控制视图的可点击性。比如,在某些情况下,你可能会在运行时根据业务逻辑改变 TextView 的点击响应。

android:clickable="true"android:clickable="false" 的主要区别是:

  • android:clickable="true":视图明确可以接受点击事件,通常用于没有设置点击监听器时标记视图为可点击的。
  • android:clickable="false":视图默认不接受点击事件,但如果在代码中设置了点击监听器,则视图仍然可以响应点击事件。

如果你不希望 TextView 在某些情况下响应点击事件,即使已经设置了点击监听器,你可以在代码中动态地设置 setClickable(false)。当你想让它再次响应点击时,设置 setClickable(true) 即可。

被覆盖,那么android:clickable="false意义何在?

android:clickable="false" 的设置通常用于以下场景:

  1. 默认不可点击:当你创建一个自定义视图或布局,并且默认情况下它不应该响应点击事件时,你可以在XML中明确地将 android:clickable 设置为 "false"。这样做可以清楚地表达出该视图的初始状态以及设计者的意图。

  2. 优化性能:对于不需要处理点击事件的视图,将其设置为不可点击可以避免在触摸事件分发过程中进行不必要的点击检查,从而轻微提升性能。

  3. 父子视图事件处理:在复杂的视图层次结构中,可能会有一些子视图默认不接受点击事件,因为点击事件被父视图处理了。例如,如果你有一个包含多个子项的布局,并且只有在特定条件下子项才应该接收点击事件,那么可以将子项的 android:clickable 默认设置为 "false" 并在需要的时候通过代码动态改变。

  4. 视觉效果:某些情况下,视图可能仅仅是用来显示信息,而不需要交互功能。通过设置 android:clickable="false" 可以确保即使后续在代码中不小心添加了点击事件监听器,该视图也不会显示点击效果(如水波纹),除非明确通过代码开启可点击状态。

android:clickable 设置为 "false" 在XML文件中的意义在于,它提供了一种声明式的方式来初始化视图的状态。虽然在代码中设置点击事件监听器会改变视图的可点击状态,但是XML文件中的设定有助于定义和理解视图的默认行为和布局的设计意图。

综上所述,android:clickable="false" 的设置更多是关于视图的初始状态和设计意图的说明,并且也有利于性能优化和事件处理策略。在实际开发中,你应该根据具体的场景和需求来决定是否需要在XML中显式设置此属性。文章来源地址https://www.toymoban.com/news/detail-789045.html

到了这里,关于android:clickable=“false“无效,依然能被点击的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android studio 报错 Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false]

    之前的项目可以运行,过一阵再次打开发现报错如下。但是新建Android studio 项目没有问题可以运行。 很久没有查到原因缺的version: \\\'8.1.0\\\'之前已经下载过也不知道为啥还要提示下载 然后就是下载失败 问题后来问题解决 将上边路径修改如下 点击🆗 等待下载完成问题解决

    2024年02月03日
    浏览(59)
  • selenium点击元素失败:</a> is not clickable at point解决办法

    代码: 报错:selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element … is not clickable at point (871, 546)… 元素单击捕获的异常,字面意思说这个元素不支持单击。 尝试使用下面方式有效:

    2024年02月02日
    浏览(87)
  • Android studio 出现Plugin [id: ‘com.android.application‘, version: ‘8.1.0‘, apply: false] 问题解决办法

    新建项目下Gradle sync报错:Plugin [id \\\'com.android.application\\\' version \\\'7.1.2\\\' apply false] was not found in any of the following sources: 相信你在网上各种搜索答案,尝试了各种设置Http proxy,也配置了很多仓库,还是不能解决问题。 解决过程 在问题排除过程中,根据网上的博客猜测是版本Gradle和

    2024年04月15日
    浏览(95)
  • Android AlarmManagerService-设置系统时间无效的问题

    使用系统接口设置时间生效,查看rtc也设置成功。但是重启后时间为首次开机的时间. 多次测试后发现,设置时间在第一次开机时系统显示的时间之后,重启后时间设置生效;设置在之前,则会还原成第一次系统开机时显示的时间。 所以怀疑时,系统在开机的时候做了时间有效

    2024年02月11日
    浏览(40)
  • android 12后WindowManager事件穿透类型悬浮窗无效问题

    笔记: 项目需要将一个悬浮窗WindowManager仅显示view给用户看,不可操作,将触摸事件穿透到后面的窗口。WindowManager.LayoutParams代码如下 在android12以下的机型中测试都没问题,触摸事件可以穿透悬浮窗。但在android 12机型测试时,触摸事件无法穿透悬浮窗了。 查了android开发者官

    2024年02月13日
    浏览(50)
  • Android Framework 常见解决方案(20)UDP广播无效问题

    该问题同时存在于android App和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效,有意思的是有的android系统可以,有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的,代码不变,只是简单的编译移植过来就变得莫名其妙的不行了,头还真是大的不

    2024年02月12日
    浏览(57)
  • Plugin [id: ‘com.android.application‘, version: ‘7.xx‘, apply: false] was not found in any ...

    Plugin [id: \\\'com.android.application\\\', version: \\\'7.3.0-alpha03\\\', apply: false] was not found in any of the following sources: 问题原因: 如上解释,所配置gradle版本在本地配置的gradle仓库里面没找到。 解决办法: 1.弄清楚自己本地的gradle插件版本,和gradle版本分别是什么要对应。 具体看Android Gradle 插件

    2023年04月09日
    浏览(40)
  • 理解vue2.x版本中productionTip=false设置无效的原因

    首先,我们看到vue官网中关于productionTip的API使用: 但是,我在本地中使用却 无效 ,代码如下: 于是,我在网上找了半天解决办法,都说是把vue.js的源码中的productionTip改成false,但是我想知道原因啊,并不是解决办法。 于是,我又去了vue的github中找解决办法,看到别人有提

    2023年04月09日
    浏览(32)
  • 充实你的Android开发工具箱:无效数据处理的方案

    😄😄个人介绍 光子郎.进行开发工作七年以上,目前涉及全栈领域并进行开发。会经常跟小伙伴分享前沿技术知识,java后台、web前端、移动端(Android,uniapp, 小程序 )相关的知识以及经验体会,不定期会有源码及框架的分享,如果你有相关的知识想要及时了解或者讨论,

    2024年02月06日
    浏览(59)
  • 报错: The option setting ‘android.enableR8=false‘ is deprecated. It will be removed in version...

    从Unity3D中发布APK到android一体机(PICO G2 4K)时报错: The option setting ‘android.enableR8=false’ is deprecated. It will be removed in version 5.0 of the Android Gradle plugin. You will no longer be able to disable R8 【Edit】【Project Settings】【Player】【Publishing Settings】【Build】 勾选两项: Custom Launcher Manifest 勾

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包