- 最近在做项目中要求手动弹出软件,刚开始感觉很容易就能实现,看了网上写的直接调用一下代码
/**
* 显示键盘
*/
fun showKeyboard(activity:Activity,edt: EditText){
edt.requestFocus()
val imm: InputMethodManager =
activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(edt, 0)
}
好吧,我直接调用了上面方法,但是就是不行。造成这个原因是调用的时机不对,如果刚进入界面就调用此方法,此时输入框还没有绘制完成,无法获取输入框焦点因此无法弹出。
- 找了网上说的方法,基本就是延迟加载
第一种:
edtText.post {
SystemUtil.showKeyboard(context as Activity,edtText)
}
第二种:需要注意的是showKeyboard中的 edt.requestFocus()需要放在外面执行,不然会异常 "Only the original thread that created a view hierarchy can touch its views"
Timer().schedule(object :TimerTask() {
override fun run() {
SystemUtil.showKeyboard(context as Activity,edtText)
}
}, 1000)
试过后第一种方法可行,第二种方法失败了,可能使用方式不对,小伙伴们可以自己去探索
网友评论