Teclado Android monitor teclado expandir/contraer monitor

Tal como e implementa elegantemente el monitoreo de expansión/colapso del teclado

La expansión y el colapso del teclado de Android siempre ha sido algo muy criticado
. Hay varios métodos, pero básicamente no son muy fáciles de usar. Hay varias restricciones.
Aquí hay un método de implementación elegante, que usa la altura real del pantalla y la pantalla La comparación de altura del área puede determinar con gracia si el teclado aparece.Es
bien sabido que el teclado ocupará el área de visualización de la aplicación real, lo que resultará en que el área de visualización real sea mucho más pequeña que la altura de la pantalla

Tire del código anterior y utilícelo directamente


/**
 * 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);
        }
    }


}

Cómo utilizar

 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 当前键盘未显示 下一步
            }
}

La originalidad no es fácil, los hermanos útiles me dan tres ha consecutivos.

Supongo que te gusta

Origin blog.csdn.net/qq_35644925/article/details/128905644
Recomendado
Clasificación