最近項目上遇到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一下這個坑,以避免後面再次碰到,繼續懵逼……