[M0]弹输入法的坑

最近项目上遇到Contacts新建联系人时,输入框没有默认焦点,输入法也没默认弹出。java

客户反馈须要有默认焦点,输入法也要默认弹出,因而问题来了.....android

首先默认焦点好弄,若是是xml布局文件,直接在布局中EditText的节点内部,插入<requestForcus/>标签就行了,以下面:
ide

<EditText
    android:id="@+id/editText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/button"
    android:layout_alignEnd="@+id/scrollView"
    android:layout_alignParentStart="true">

    <requestFocus />
</EditText>

但坑爹的是这里不是xml布局,输入框都是代码动态插进去的......布局

不过这也不难,代码里面调用EditText.requestFocus();通常就能够获取焦点了。code

咱们知道,通常状况下输入框默认有焦点时,输入法就会自动弹出来了,但这里又来了一个坑,输入法并无自动弹出来。xml

没弹出来,咱们代码控制弹出来就行了噜,码代码:get

InputMethodManager imm = (InputMethodManager)getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);//用SHOW_FORCE也能够,具体区别请自行百度。

结果编译完,push进去,擦,仍是没弹出来,瞬间懵逼......it

反复检查也没发现写错,叫来同事也没有搞明白肿么回事,个个懵逼......编译

最后谷哥出一个方法,使用延时弹出,也就是说,Activity显示出来以后,并不当即调用上面的代码直接弹输入法,而是延时一段时间再弹。class

代码以下:

private void showInputMethod(final Context context, final View view, final long delay) {
    Timer timer = new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
        }
    }, delay); // 若是这里的时间过短,可能出现输入法弹不出来的状况。
}

这里一开始查到的delay=1000ms,以为太长了点,换成了500ms,编译push,运行,也弹不出来......

继续懵逼......

最后无奈试了下1000ms,竟然弹出来了,而后问了群里的大神,有人解释说多是一开始弹出输入法受到了干扰,但具体是什么缘由也搞不明白......

Mark一下这个坑,以避免后面再次碰到,继续懵逼……

相关文章
相关标签/搜索