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

相關文章
相關標籤/搜索