文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android 键盘监听 键盘展开/收起监听

2023-09-01 21:57

关注

Android 键盘的展开与收起一直是个很遭人诟病的东西
方法各式各样都有,但是基本都不是很好用,有各种限制
这里编写了一个优雅地实现方式,利用屏幕实际高度与显示区域的高度对比可以优雅地判断出是否弹出键盘.
众所周知键盘是会侵占实际应用的显示区域,导致实际显示区域要远小于屏幕高度

上代码 拉走直接用

class KeyBoardUtil(    activity: Activity,    var keyboardVisibilityListener: ((isVisibility: Boolean) -> Unit)?) {    private val contentView: View    var height: Int = 0    var isVisibility = false    init {        contentView = activity.window.decorView        //初始化时先判断当前键盘状态 isVisibility = getScreenHeight(activity) > getWindowContentHeight(activity)        //这个监听的主要作用是在键盘弹出布局发生改变时 动态的通知用户键盘是否弹出        contentView.viewTreeObserver.addOnGlobalLayoutListener {            isVisibility = if (getScreenHeight(activity) > getWindowContentHeight(activity)) {                keyboardVisibilityListener?.invoke(true)                true            } else {                keyboardVisibilityListener?.invoke(false)                false            }        }    }    //屏幕高度 固定不变 = 屏幕高度 - titlebar    private fun getScreenHeight(context: Context?): Int {        val displayMetrics = context!!.resources.displayMetrics        return displayMetrics.heightPixels    }    //可视区域高度 会根据显示区域变化 出现键盘时变小 不出现时 大于等于 getScreenHeight()高度    private fun getWindowContentHeight(activity: Activity?):Int{        if (activity==null)return 0        val rect = Rect()        activity.window.decorView.getWindowVisibleDisplayFrame(rect)        return rect.height()    }    companion object{                fun hideKeyboard(context:Activity?) {            val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager            // 隐藏软键盘            imm.hideSoftInputFromWindow(context.window.decorView.windowToken, 0);        }    }}

使用方式

 var keyBoardUtil: KeyBoardUtil = KeyBoardUtil(activity){isVisibility->}fun show(){ if (keyBoardUtil?.isVisibility==true){//判断当前键盘是否显示                KeyBoardUtil.hideKeyboard(this)//收起键盘                keyBoardUtil?.keyboardVisibilityListener={//键盘收起监听                    if (!it){//键盘收起后下一步                        //todo 操作                       keyBoardUtil?.keyboardVisibilityListener = null//取消监听,防止后续键盘持续监听                    }                }            }else{               //todo 当前键盘未显示 下一步            }}

原创不易,有用的兄弟给个三连哈

来源地址:https://blog.csdn.net/qq_35644925/article/details/128905644

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯