Kotlin 中显示和隐藏键盘

2023-12-12  本文已影响0人  因为我的心

1、发生的原因:

1、我们希望在第一次进入页面的时候,不弹起软键盘;
2、当前页面手动点击弹起软键盘,离开当前页,去别的页面,关闭弹起软键盘;

解决:我们在Activity或者Fragment的基类中,直接写,调用即可。

2、首次进入页面,键盘不弹起,键盘弹起不挤压布局变形;

        <activity android:name=".ui.activity.login.LoginActivity"
            android:screenOrientation="portrait"
            android:configChanges="orientation|screenSize|locale"
            android:windowSoftInputMode="adjustNothing"
            />

3、Activity中控制键盘的显示和隐藏

abstract class BaseActivity<VM : BaseViewModel, VB : ViewBinding> : BaseVmVbActivity<VM, VB>() {
    private val imm: InputMethodManager? by lazy { getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager? }

    abstract override fun initView(savedInstanceState: Bundle?)



    override fun onPause() {
        super.onPause()
        //隐藏键盘
        hideSoftInput()
    }


    /**
     * 隐藏键盘
     */
    fun hideSoftInput() {
        this?.currentFocus?.let {
            imm?.hideSoftInputFromWindow(it.windowToken, 0)
        }
    }
    /**
     * 显示键盘
     */
    fun showSoftInput() {
        this?.currentFocus?.let {
            imm?.showSoftInput(it, 0)
        }
    }
}

4、Fragment中控制键盘的显示和隐藏

abstract class BaseFragment<VM : BaseViewModel, VB : ViewBinding> : BaseVmVbFragment<VM, VB>() {

    abstract override fun initView(savedInstanceState: Bundle?)

    /**
     * 懒加载 只有当前fragment视图显示时才会触发该方法
     */
    override fun lazyLoadData() {}

    override fun onPause() {
        super.onPause()
        //隐藏键盘
        hideSoftInput()
    }


    /**
     * 隐藏键盘
     */
    fun hideSoftInput() {
        val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(view?.windowToken, 0)
    }
    /**
     * 显示键盘
     */
    fun showSoftInput() {
        val imm = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}
上一篇下一篇

猜你喜欢

热点阅读