不过你是否记得,在你不像长大后那么在意这些所谓的优势和劣势的年幼时光,在没有面试官会不停要求你分析自己的强项与弱点的漫长过去,你其实是没有任何短板的。
需求是进入一个页面自动弹出软键盘!
项目背景
使用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)
}
最后有更好的解决请评论告诉我哦,我不想这么骚的!
网友评论