Android - 在软键盘上捕获“完成”和“输入”键事件

时间:2013-05-31 07:19:26

标签: android login android-edittext android-softkeyboard keyevent

我的应用中有一个登录页面,其中列出了以下元素:

  • 用户名(EditText)
  • 密码(EditText)
  • 登录(按钮)

按下Login,它将进入主屏幕。当用户在完成键入Done上的软键盘上的密码时点击Samsung Galaxy S3时,目的是执行相同的操作;和Enter上的软键盘的HTC One X键。

因此,以下是密码字段的EditText如何:

<EditText
    android:id="@+id/password_txt"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="8dp"
    android:singleLine="true" />

在活动中,我试过的就是:

EditText mPassword = (EditText) findViewById(R.id.password_txt);
mPassword.setOnEditorActionListener(new TextView.OnEditorActionListener() {

                @Override
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                    if(event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER || actionId == EditorInfo.IME_ACTION_DONE){
                        Log.e("MyApp", " ------> IN EDITOR ACTION DONE");
                    }
                    return false;
                }
            });

我确实尝试将密码字段的imeOptions与actionDone一起保留为flagNoExtractUi,但它没有用完。

2 个答案:

答案 0 :(得分:3)

我在reply by Asha找到了一个解决方案,这似乎适用于三星Galaxy S3,S3 Mini,S2,Google Nexus Tab以及三星的所有设备。对于HTC,它已经在HTC Desire X上工作到目前为止我已经检查过了。对于HTC One X,这不起作用。这个actionid的值为5,用于捕获软键盘的enter键操作。

答案 1 :(得分:2)

HTC由于某些原因不支持imeOptions,通常并非所有键盘都支持它。点击here了解更多信息。我的建议是为next / done / etc制作你自己的UI按钮。功能。