29

我正在为软键盘上的完成按钮而苦苦挣扎。我无法让软键盘完成按键以隐藏键盘。从另一个按钮,它可以完美地与

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

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

感谢收听!

main.xml:

<EditText 
    android:id="@+id/answer" 
    android:layout_gravity="center_horizontal" android:textSize="36px"
    android:inputType="phone"
    android:minWidth="60dp" android:maxWidth="60dp"
/>

Java 文件:

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文件中):

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”键时,键盘隐藏。这很奇怪。

4

7 回答 7

59

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

<EditText
    ...
    android:imeOptions="actionDone" />
于 2015-11-30T13:36:38.653 回答
26
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);

上下文是您的活动。

于 2010-08-05T13:52:31.623 回答
4

更改了 if 语句以if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)使其与 xml-attribute 一起使用android:inputType="phone"

于 2010-08-06T08:41:49.307 回答
1

您应该查看 EditText 的 setOnEditorActionListener():

设置在文本视图上执行操作时要调用的特殊侦听器。这将在按下回车键或用户选择提供给 IME 的操作时调用。

于 2013-02-04T16:25:12.687 回答
0

使用下面的代码android:imeOptions="actionDone"为我工作。

 <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" />
于 2018-03-09T10:26:46.090 回答
0

SoftKeyboard可以通过以下方式隐藏

在 Java 类中,我们可以编写以下代码来在用户按下完成或输入时隐藏键盘

etBid.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH ||
                    actionId == EditorInfo.IME_ACTION_DONE ||
                    event != null &&
                            event.getAction() == KeyEvent.ACTION_DOWN &&
                            event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
            {
                if (event == null || !event.isShiftPressed())
                {
                    // the user is done typing.
                    InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    return true; // consume.
                }
            }
            return false; // pass on to other listeners.
        }
于 2019-12-19T05:55:15.557 回答
0

<EditText ... android:inputType="text" android:imeOptions="actionDone" />

于 2021-10-17T08:05:08.060 回答