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

这篇具有很好参考价值的文章主要介绍了Android 键盘监听 键盘展开/收起监听。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如和优雅地实现键盘展开/收起监听

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

上代码 拉走直接用


/**
 * CreateTime 2023/2/616:08
 * 键盘 打开/收起 监听 实时回调
 */
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{
        /**
         * 隐藏键盘的方法
         *
         * @param context
         */
        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 当前键盘未显示 下一步
            }
}

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

到了这里,关于Android 键盘监听 键盘展开/收起监听的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Android网络状态变化监听 -- 结合registerNetworkCallback和广播(kotlin)

        说明   AndroidAndroid针对网络状态变化的监听,在应用内我们通用需要监听设备网络状态的变化,作出相应的业务处理,需要一个方便的、全局的监听实现。。   针对不同设备的系统版本,使用不同的API方法实现;   注意使用广播监听网络状态在高版本的适配问题

    2024年02月03日
    浏览(36)
  • Android弹出软键盘时把布局顶上去的解决方法

    当 Android 软键盘弹出时,布局会被顶上去的问题,可以尝试以下解决方法: 使用 android:windowSoftInputMode 属性:在 AndroidManifest.xml 文件中设置 Activity 的 android:windowSoftInputMode 属性,可以在软键盘弹出时自动调整布局。例如: xmlCopy code activity android:name=\\\".MainActivity\\\" android:windowSof

    2024年02月01日
    浏览(34)
  • 【Android】Dialog弹出软键盘时把布局顶起来的实现

    demo效果如下: 软键盘和EditText保持一定间距的实现思路,可以设置EditText 的 paddingBottom

    2024年01月20日
    浏览(34)
  • Android 关于键盘弹出顶出输入框并不上移布局处理

    键盘弹出时想输入框上升到适应键盘高度,之前是直接取键盘高度设置底部margin实现的,但是在测试时发现如果在键盘弹出时切换输入法键盘高度可能发生变化,直接设置margin就不能满足了。 然后试了下网上的方法,在AndroidManifest.xml对应的activity里添加 android:windowSoftInputMo

    2024年02月16日
    浏览(25)
  • Android EditText的setOnEditorActionListener方法——监听软键盘按键

    1、控件EditText的setOnEditorActionListener方法的使用 setOnEditorActionListener这个方法,并不是在我们点击EditText的时候触发,也不是在我们对EditText进行编辑时触发,而是在我们编辑完之后点击软键盘上的各种键才会触发。 通过 布局文件 中的imeOptions可以控制软件盘右下角的按钮显示

    2024年02月10日
    浏览(34)
  • android 点击输入框editText后点击textview会弹出软键盘问题解决

    在 Android 中,当一个 EditText 或其它可以输入文本的控件获取焦点时,系统会自动弹出软键盘以便用户输入。当软键盘弹出后,点击其它控件,比如 TextView,也会触发 EditText 失去焦点的事件,从而导致软键盘关闭。这是 Android 系统默认的行为。 但是,在某些情况下,用户希望

    2024年02月15日
    浏览(41)
  • Android初学之android studio运行java/kotlin程序

    第一步骤: File — New — New Module ,然后弹出一个框,(左边)选择 Java or Kotlin Library ,(右边)编辑自己的图书馆名、包名、类名,选择 Java 一个语言,然后 Finish 如下图: 然后,就可以看见我新建的 java Library 了,如下图: 第二步骤:马上写个测试程序 看看能不能运行

    2024年02月11日
    浏览(40)
  • Android Studio中实现弹出提示框的两种方法

    Android Studio中实现弹出提示框的两种方法 在Android开发过程中,经常需要使用弹出提示框来向用户展示信息或者获取用户的输入。在Android Studio中,我们可以通过两种方法来实现弹出提示框:使用AlertDialog和Toast。 方法一:使用AlertDialog AlertDialog是Android提供的一个用于展示对话

    2024年02月07日
    浏览(33)
  • Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题

    要在 Android 应用中全局检测软键盘的弹起,您可以使用 ViewTreeObserver.OnGlobalLayoutListener 监听器来监听布局树的变化。当软键盘弹起或隐藏时,布局树会发生变化,因此您可以在监听器中捕获这些变化。 在上面的代码中, rootView 是您布局的根视图,您需要将其替换为您实际布局

    2024年02月11日
    浏览(30)
  • Android studio(一)按钮监听的三种方式

    第一种方法:public class Activity2 extends AppCompatActivity implements View.OnClickListener 设置监听后,用id进行分别寻址 第二种方法:将implements写在监听类上 第三种方法:由于新版似乎不允许button根据id用switch语句,所以可以改用textview 在对应的布局文件里也需要为textview添加一个属性

    2024年02月02日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包