当前位置: 首页 > news >正文

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

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

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

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

例如:

<TextViewandroid: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() {@Overridepublic 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中显式设置此属性。

http://www.lryc.cn/news/279907.html

相关文章:

  • Springboot WebFlux项目结合mongodb进行crud
  • 超维空间M1无人机使用说明书——61、ROS无人机物体识别与精准投放
  • Flask 小程序菜品搜索
  • Excel·VBA按指定顺序排序函数
  • 数据结构学习笔记——查找算法中的树形查找(红黑树)
  • Debezium发布历史66
  • Redis系列之使用Lua脚本
  • Wargames与bash知识16
  • 关于运维·关于数据库面试题
  • MySQL题目示例
  • HTML基本语法
  • 二分图最大匹配——匈牙利算法详解
  • 【AI视野·今日Robot 机器人论文速览 第七十一期】Fri, 5 Jan 2024
  • xtu oj 1334 Least Common Multiple
  • 【论文笔记】End-to-End Diffusion Latent Optimization Improves Classifier Guidance
  • 【HarmonyOS4.0】第四篇-ArkUI基础实战
  • 每日一题——LeetCode1128.等价多米诺骨牌对的数量
  • 关联规则分析(Apriori算法2
  • 数据仓库(2)-认识数仓
  • C#编程-实现委托
  • Ubuntu18.04 Qt 实现MQTT
  • 【软件测试】学习笔记-不同视角的软件性能与性能指标
  • Spring MVC组件
  • vue文件在<template>中使用多个<el-main>报错(已解决)
  • 【PlantUML】- 时序图
  • openai自定义API操作 API (openai.custom):OpenAI API 实现电商平台的智能库存管理
  • 宠物服务新篇章:预约小程序带来的变革
  • 谷歌最新医学领域LLM大模型:AMIE
  • 路由器02_静态路由DHCP
  • Mysql 递归查询所有子节点,hutool树形结构封装