[Android M]弹输入法的坑

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

客户反馈需要有默认焦点,输入法也要默认弹出,于是问题来了.....

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

<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();一般就可以获取焦点了。

我们知道,一般情况下输入框默认有焦点时,输入法就会自动弹出来了,但这里又来了一个坑,输入法并没有自动弹出来。

没弹出来,我们代码控制弹出来就好了噜,码代码:

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

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

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

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

代码如下:

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一下这个坑,以免后面再次碰到,继续懵逼……

你可能感兴趣的:([Android M]弹输入法的坑)