聚焦edittext時如何顯示軟鍵盤

EditText處於焦點狀態時(若是設備沒有物理鍵盤),我想自動顯示軟鍵盤,而且有兩個問題: android

  1. 當顯示個人Activity ,個人EditText處於焦點狀態,但未顯示鍵盤,我須要再次單擊它以顯示鍵盤(顯示個人Activity時,它應該顯示)。 ide

  2. 當我在鍵盤上單擊「完成」時,鍵盤被關閉,但EditText保持焦點,而且您不想要(由於個人編輯已完成)。 post

要恢復,個人問題是在iPhone上有更多相似的東西:它使鍵盤與個人EditText狀態保持同步(已聚焦/未聚焦),而且若是有物理鍵盤,固然也不會顯示軟鍵盤。 this


#1樓

要使鍵盤出現,請使用 spa

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

與直接調用InputMethodManager相比,此方法更可靠。 code

要關閉它,請使用 rem

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

#2樓

如下代碼摘自Google 4.1的SearchView源代碼。 彷佛能夠正常使用,在較小版本的Android上也能夠。 get

private Runnable mShowImeRunnable = new Runnable() {
    public void run() {
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.showSoftInput(editText, 0);
        }
    }
};

private void setImeVisibility(final boolean visible) {
    if (visible) {
        post(mShowImeRunnable);
    } else {
        removeCallbacks(mShowImeRunnable);
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindowToken(), 0);
        }
    }
}

而後,此外,在建立控件/活動時,須要添加如下代碼。 (在個人狀況下,它是一個複合控件,而不是活動)。 同步

this.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        setImeVisibility(hasFocus);
    }
});

#3樓

清單文件中的android:windowSoftInputMode="stateAlwaysVisible" ->。 it

edittext.requestFocus(); ->在代碼中。

這將打開軟鍵盤,隨着活動的出現,編輯文本將在該軟鍵盤上請求焦點。


#4樓

只需在清單文件中添加android:windowSoftInputMode =「 stateHidden」 ...


#5樓

我在各類不一樣狀況下都遇到了相同的問題,在某些狀況下我發現瞭解決方案,但在另外一些狀況下卻不起做用,所以,這裏的組合解決方案在我發現的大多數狀況下均可以工做:

public static void showVirtualKeyboard(Context context, final View view) {
    if (context != null) {
        final InputMethodManager imm =  (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        view.clearFocus();

        if(view.isShown()) {
            imm.showSoftInput(view, 0);
            view.requestFocus();
        } else {
            view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                @Override
                public void onViewAttachedToWindow(View v) {
                    view.post(new Runnable() {
                        @Override
                        public void run() {
                            view.requestFocus();
                            imm.showSoftInput(view, 0);
                        }
                    });

                    view.removeOnAttachStateChangeListener(this);
                }

                @Override
                public void onViewDetachedFromWindow(View v) {
                    view.removeOnAttachStateChangeListener(this);
                }
            });
        }
    }
}
相關文章
相關標籤/搜索