Android模拟点击弹出软键盘

不过你是否记得,在你不像长大后那么在意这些所谓的优势和劣势的年幼时光,在没有面试官会不停要求你分析自己的强项与弱点的漫长过去,你其实是没有任何短板的。

需求是进入一个页面自动弹出软键盘!

项目背景

使用ImmersionBar沉浸式状态栏,我尝试了ImmersionBar的解决方案,第一种键盘可以弹出但是不能自动弹出,第二种方案可行,但是又要自己修改XML又要自己沉浸式状态栏、我选择放弃。我不管我就要用着ImmersionBar自动弹出软键盘、哼很凶的!!!

ImmersionBar解决EditText和软键盘的方案

第一种方案

  ImmersionBar.with(this)
            .statusBarDarkFont(true)
            .keyboardEnable(true)//解决软键盘与底部输入框冲突问题
//            .keyboardEnable(true,//软键盘自动弹出
//                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE or  WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
            .init()

第二种方案 不使用keyboardEnable方法,只需要在布局的根节点(最外层节点)加上android:fitsSystemWindows="true"属性即可,只适合纯色状态栏

自动弹出键盘的代码
fun Activity.showKeyboard(view: EditText) {
    view.isFocusable = true
    view.isFocusableInTouchMode = true
    view.requestFocus()
    val manager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    manager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
}

解决方案

既然正规的方式行不通,那我可要骚起来了~,进入页面后自己点一下(代码操作点一下)

/**
 * 模拟点击显示软键盘
 * @param view
 * 建议在onResume方法中调用此方法
 * 延时200毫秒使界面绘制完毕,获取view的坐标进行点击。
 */
fun simulateClick(view: View) {
    Handler().postDelayed({
        val location = IntArray(2)
        view.getLocationInWindow(location)
        val x = location[0].toFloat() // view距离window 左边的距离(即x轴方向)
        val y = location[1].toFloat() // view距离window 顶边的距离(即y轴方向)
        val downTime = SystemClock.uptimeMillis()
        val downEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0)
        val upEvent = MotionEvent.obtain(downTime, downTime, MotionEvent.ACTION_UP, x, y, 0)
        view.onTouchEvent(downEvent)
        view.onTouchEvent(upEvent)
        downEvent.recycle()
        upEvent.recycle()
    },200)
}

最后有更好的解决请评论告诉我哦,我不想这么骚的!

你可能感兴趣的:(Android模拟点击弹出软键盘)