聚焦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);
                }
            });
        }
    }
}
相关文章
相关标签/搜索