IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 12 实用更新:置灰的控件也可以点击啦 -> 正文阅读

[移动开发]Android 12 实用更新:置灰的控件也可以点击啦

最近在研究 Android 12 源码的时候发现 View 里多了一个有意思的属性 allowClickableWhenDisabled:允许 disabled 状态下点击。

简单唠唠这个简单明了的小更新。

未点击**“同意”隐私条款的情况下点击“开始”** 按钮 的话,App 会弹出需要勾选的说明或者抖动复选框来加以提示。无论是作为用户还是开发者,对于这种设计应该都不陌生。

开发人员要实现这个小功能的话,简单来说监听勾选情况,适时更新 Button 的 disabled 状态就可以了。但这样一来,当 Button 处于 disabled 状态的时候,它就无法接收点击事件了,进而没法便捷地进行进一步地提示。

这时候为了能够满足设计需求,开发者往往需要自定义 Button 的 Touch 逻辑,或者绕过 disabled 状态自行控制 Button 的背景,甚至于压根不控制 Button 背景色了就让它保持 normal 状态。

点击 Button 无法进行下一步操作的情况下,仍然保持可点击的 UI 效果并不友好。

Android 12 中新引入的 allowClickableWhenDisabled 属性可以让这个小功能的实现变得清晰又简单。

属性说明
clickable可以处理事件,但 disabled 状态下的话无法处理,而是直接消费
allowClickableWhenDisabled可以处理事件,即便处于 disabled 状态

看一下简单的示例代码:

  1. 在置灰的控件上设置 allowClickWhenDisabled 为 true 即可,当然通过代码调用 setAllowClickWhenDisabled() 也可以
<android.support.constraint.ConstraintLayout ... >
    
    <Button
        android:onClick="clickView"
        android:enabled="false"
        android:allowClickWhenDisabled="true"
        ... />

</android.support.constraint.ConstraintLayout>
  1. 接着在 Button 点击的事件里判断当前是否为 disabled 状态,继而决定是提示用户等操作还是放行点击动作。
    fun clickView(view: View) {
        if (view.isEnabled) {
            // Go on
            // ...
        } else {
            // Show warning tips
            Toast.makeText(
                this@MainActivity,
                "Disabled, u need click yes first!",
                Toast.LENGTH_SHORT
            ).show()
        }
    }

效果:

来看一下这个更新的具体提交和源码。

commit 911dd88ca6306519f4fbdba10c388aa70a2ee20e

Author: Priyank Singh priyanksingh@google.com

Date: Fri Mar 27 15:09:16 2020 -0700

Add attr allowClickWhenDisabled for the new API View#setAllowClickWhenDisabled

// View.java
    private static final int PFLAG4_ALLOW_CLICK_WHEN_DISABLED = 0x000001000;

    public void setAllowClickWhenDisabled(boolean clickableWhenDisabled) {
        if (clickableWhenDisabled) {
            mPrivateFlags4 |= PFLAG4_ALLOW_CLICK_WHEN_DISABLED;
        } else {
            mPrivateFlags4 &= ~PFLAG4_ALLOW_CLICK_WHEN_DISABLED;
        }
    }

    public boolean onTouchEvent(MotionEvent event) {
        ...
        if ((viewFlags & ENABLED_MASK) == DISABLED
                && (mPrivateFlags4 & PFLAG4_ALLOW_CLICK_WHEN_DISABLED) == 0) {
            ...
            return clickable;
        }

        if (clickable || (viewFlags & TOOLTIP) == TOOLTIP) {
            switch (action) {
                ...
            }
        ...
    }

逻辑很简单,在 onTouchEvent() 里发现 disabled 状态且没有设置 allowClickableWhenDisabled 的话才会不发送事件直接消费。一旦控件设置了 allowClickableWhenDisabled 属性,就可以继续处理事件了。

这是 Android 12 众多更新中容易忽略、却很实用的一个小更新,大家可以留意一下,日后遇到类似的需求也用得上!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-08 22:39:08  更:2022-03-08 22:42:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:04:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码