安卓 - 捕获软键盘上的“完成”和“回车”按键事件

9
我在我的应用程序中有一个登录页面,在其中有以下元素:
  • 用户名(EditText)
  • 密码(EditText)
  • 登录(Button)
当按下“登录”按钮时,它将进入主屏幕。如果用户在三星Galaxy S3的软键盘上输入完密码后点击“完成”,或者在HTC One X的软键盘上按下“Enter”键,则意图执行相同的操作。
因此,这是密码字段的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" />

在Activity中,无论我尝试什么,都在这里:
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个回答

3
我在Asha的回答中找到了解决方案,对于三星Galaxy S3、S3 Mini、S2、Google Nexus Tab等所有三星设备,这个方案都可以很好地工作。对于HTC Desire X,我已经检查过,它也可以使用。但是对于HTC One X,这个方案不起作用。其中有一个actionid,值为5,用于捕获软键盘上的enter键操作。

2

由于某些原因,HTC不支持imeOptions,总的来说,并非所有键盘都支持它。在这里了解更多信息。我的建议是为下一个/完成等功能制作自己的UI按钮。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接