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

Android 点击其他组件让输入框失去焦点

1.需求背景

在用户填写基本信息的界面里,在输入框唤起键盘后,有时候又会弹起选择框(PickerViewDialog),如果用户在没有关闭键盘的情况下,点击PickerView,此时的焦点仍然在上个输入框,此时选择框选择关闭后,部分机型的软键盘又弹了起来,这样给用户的交互体验自然是不好的。

2.解决办法

之前想的是,在点击选择框时,让输入框失去焦点,但是有多个选择框和输入框的情况下,这样代码就太冗余了。于是就想到了,在dispatchTouchEvent里进行事件处理。

3.实现代码

    override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
        when (ev.action) {
            MotionEvent.ACTION_DOWN -> {
                //获得当前聚焦控件,Activity有此方法
                val view = currentFocus 
                //如果当前聚焦的是输入框
                if (view is EditText) {
                    val rect = Rect()
                    //获得控件在屏幕上的显示区域
                    view.getGlobalVisibleRect(rect) 
                    //如果点击的位置不是输入框
                    if (!rect.contains(ev.rawX.toInt(), ev.rawY.toInt())) {
                        view.clearFocus()//失去焦点
                    }
                }
            }
        }
        return super.dispatchTouchEvent(ev)
    }

4.这样就实现了点击屏幕上就失去焦点的功能


http://www.kler.cn/news/323857.html

相关文章:

  • 基于php摄影门户网站
  • 手游和应用出海资讯:三七新游首月收入突破700万元;领英尝试推出游戏功能以增加用户使用时长
  • leetcode:LCR 169. 招式拆解 II(python3解法)
  • 智能Ai语音机器人的应用价值有哪些?
  • 【逐行注释】扩展卡尔曼滤波EKF和粒子滤波PF的效果对比,MATLAB源代码(无需下载,可直接复制)
  • window下 php 安装 lua扩展
  • Docker容器的使用
  • 银河麒麟v10 x86制作openssh 9.9p1 rpm二进制包(内含ssh-copy-id、显示openssl版本) —— 筑梦之路
  • 初始爬虫9
  • SSE协议
  • 如何使用ssm实现校园体育赛事管理系统的设计与实现+vue
  • SpringBoot使用hutool操作FTP
  • 不将“旧”,换新家电的门槛又被TCL拉低了
  • 探索未来IT技术的浩瀚星河:一场跨越时代的数字盛宴
  • docker笔记_数据卷、挂载
  • 【STM32】RTT-Studio中HAL库开发教程七:IIC通信--EEPROM存储器FM24C04
  • Labview helper
  • 用最容易理解的方法,实现LRU、LFU算法
  • 代码随想录训练营第45天|编辑距离
  • 微前端框架之乾坤【qiankun】(一)
  • 使用SSE流式输出(Javaweb前后端实战)
  • 测试用例的进阶二
  • 速盾:视频开cdn合适还是视频点播合适?
  • cv2.waitkey(30) 按键盘无效
  • 快速排序(plus)与单调栈道,力扣912.排序数组​​​​​​​力扣215.数组中的第k大个元素力扣17.14最小的k个数单调栈力扣.柱状图中最大的矩形
  • OpenHarmony标准系统上实现对rk系列芯片NPU的支持(npu使用)
  • LORA DASH -一种更高效的微调方式
  • python医疗机器人手术
  • html TAB切换按钮变色、自动生成table--使用函数优化结构
  • opencv:实现图像的自动裁剪与优化