强制打开软键盘

jax*_*jax 46 android

我试图在一个Activity中强制打开Soft Keyboard并抓取输入的所有内容,因为我想自己处理输入,我没有EditText.目前我已经尝试了这个,但它不起作用.我想在mAnswerTextView下打开Soft Keyboardto(注意:它是TextView而不是EditText).

    InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    // only will trigger it if no physical keyboard is open
    mgr.showSoftInput(mAnswerTextView, InputMethodManager.SHOW_IMPLICIT);
Run Code Online (Sandbox Code Playgroud)
  1. 如何强制打开软键盘
  2. 如何获取输入的所有内容,以便我可以处理每个角色.我想在处理之后从软键盘中清除每个字符.即,用户不应该在软键盘中输入整个单词.

Dmi*_*try 129

试试这个强制打开软键盘:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
Run Code Online (Sandbox Code Playgroud)

然后你可以使用这段代码来关闭键盘:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(_pay_box_helper.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)


Yon*_*lan 15

您可能需要具有某种可编辑的文本区域才能获得焦点.但是,您可能有一个不可见或透明背景,没有光标.您可能需要使用视图的可聚焦设置.

使用TextWatcher检查编辑到的EditText与addTextChangedListener,或者如果你需要一个甚至下位钩,其setOnKeyListener()方法设置的TextView的主要听众.请参阅KeyListener文档.

使用此调用强制打开软键盘:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .showSoftInput(myEditText, InputMethodManager.SHOW_FORCED);
Run Code Online (Sandbox Code Playgroud)

这个关闭它:

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE))
    .hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)

请注意,这是不推荐的 - 强制打开键盘有点乱.您的用例是什么,真正需要您在没有正常编辑框的情况下接受用户输入,并且需要逐个键地输入用户输入而不回复它?

  • showSoftInput()并非总是在第一次尝试时起作用。我发现我必须对视图重复执行2次操作才能显示。 (2认同)

小智 7

强制键盘打开我使用过

this.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
Run Code Online (Sandbox Code Playgroud)

它对我有用.


tri*_*ogy 7

有时其他答案不起作用.
这是另一种方式..

它将通过监听窗口焦点强制键盘显示活动开始的时间.onWindowFocusChanged()它将清除并请求EditText的焦点,然后将软输入模式设置为可见,并将选择设置为框中的文本.如果您从活动中调用它,这应始终有效.

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        mEditText.clearFocus();
        mEditText.requestFocus();
        getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        mEditText.setSelection(mEditText.getText().toString().length());
    }
}
Run Code Online (Sandbox Code Playgroud)

你可能还需要

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus) {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(mEditText, InputMethodManager.SHOW_IMPLICIT);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

编辑:我也看到键盘未在嵌套片段中打开,请注意这些情况.