最近项目上遇到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一下这个坑,以避免后面再次碰到,继续懵逼……