Android中的完成键盘上隐藏软键盘?

Hide Soft Keyboard on Done Keypress in Android?

我正在努力使用软键盘上的完成按钮。 我无法通过软键盘完成按键来隐藏键盘。 从另一个按钮,它完美地与

imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);

但onKeyListener不能按我想要的方式运行。 当我点击editText时,软键盘会显示,其内容将从字符中清除。

谢谢收听!

main.xml:

1
2
3
4
5
6
<EditText
    android:id="@+id/answer"
    android:layout_gravity="center_horizontal" android:textSize="36px"
    android:inputType="phone"
    android:minWidth="60dp" android:maxWidth="60dp"
/>

Java文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
private EditText editText;
//...
editText = (EditText)findViewById(R.id.answer);
editText.setOnClickListener(onKeyboard);
editText.setOnKeyListener(onSoftKeyboardDonePress);
//...

// method not working:
private View.OnKeyListener onSoftKeyboardDonePress=new View.OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
        {
            // code to hide the soft keyboard
            imm = (InputMethodManager) getSystemService(
                Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
        }
        return false;
    }
};

private View.OnClickListener onKeyboard=new View.OnClickListener()
{
    public void onClick(View v)
    {
        editText.setText("");
    }
};

使用按钮的工作方法(在同一个java文件中):

1
2
3
4
5
6
7
8
9
10
11
private View.OnClickListener onDone=new View.OnClickListener()
{
    public void onClick(View v)
    {
        //....
        // code to hide the soft keyboard
        imm = (InputMethodManager) getSystemService(
            Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
    }
};

编辑:当我按下键"9"时键盘隐藏。 那很奇怪。


使用android:imeOptions ="actionDone",就像这样:

1
2
3
<EditText
    ...
    android:imeOptions="actionDone" />


1
2
3
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);

上下文是你的活动。


将if语句更改为if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)使其使用xml-attribute android:inputType="phone"


你应该看一下EditText的setOnEditorActionListener():

Set a special listener to be called when an action is performed on the
text view. This will be called when the enter key is pressed, or when
an action supplied to the IME is selected by the user.


使用下面的代码与android:imeOptions="actionDone"的工作对我来说。

1
2
3
4
5
6
7
 <EditText
    android:id="@+id/et_switch_name"      
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:hint="Name"
    android:imeOptions="actionDone"      
    android:inputType="textPersonName" />