解决自定义键盘中的bug

https://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650825245&idx=1&sn=cfcf0d50b561a0096ff31df4645fa9a7&chksm=80b7b683b7c03f950dcf3bfaf8de271ba62e12fb244c35760e317142a91a5a89beb792930941&scene=38#wechat_redirect

这篇文章写的自定义键盘有个bug,两个输入框同时在的时候,自定义的edittext光标不显示,特在此记录解决办法
修改ontouchevent 中的代码为:

 override fun onTouchEvent(event: MotionEvent?): Boolean {
        hideSystemKeyBoard()
        isCursorVisible=true
        if (event?.action == MotionEvent.ACTION_UP) {
            if (keyboardView?.visibility != View.VISIBLE) {
                keyboardView?.visibility = View.VISIBLE
                viewGroup?.visibility = View.VISIBLE
                listener?.show()
            }
        }
        return super.onTouchEvent(event)
    }

  其中,hideSystemKeyBoard(),代码如下

 private fun hideSystemKeyBoard() {
        val imm = this.context_?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                ?: return
        val isOpen = imm.isActive
        if (isOpen) {
            imm.hideSoftInputFromWindow(windowToken, 0)
        }

        val currentVersion = Build.VERSION.SDK_INT
        var methodName: String? = null
        if (currentVersion >= 16) {
            methodName = "setShowSoftInputOnFocus"
        } else if (currentVersion >= 14) {
            methodName = "setSoftInputShownOnFocus"
        }

        if (methodName == null) {
            inputType = 0
        } else {
            try {
                val setShowSoftInputOnFocus = EditText::class.java.getMethod(methodName, java.lang.Boolean.TYPE)
                setShowSoftInputOnFocus.isAccessible = true
                setShowSoftInputOnFocus.invoke(this, java.lang.Boolean.FALSE)
            } catch (e: NoSuchMethodException) {
                inputType = 0
                e.printStackTrace()
            } catch (e: IllegalAccessException) {
                e.printStackTrace()
            } catch (e: InvocationTargetException) {
                e.printStackTrace()
            } catch (e: IllegalArgumentException) {
                e.printStackTrace()
            }

        }
    }

在activity中,控制自定义键盘的显示

login_input_mobile_et.setOnTouchListener { v, event ->
            login_password_psd_et.hideKeyBoard()
            super.onTouchEvent(event)
        }

问题解决

 

  

 

转载于:https://www.cnblogs.com/zhdsky/p/11078265.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值