EditText设置IME动作问题

在Android Studio的Templates中的Login Activity中,看到了EditText中可以设置android:imeOptions、android:imeActionId以及android:imeActionLabel的属性来定义Enter键的内容

控件EditText设置如下

 运行图如下所示,可以看到红色箭头所示的地方Enter键的内容是自定义的label值 
  

EditText设置IME动作问题_第1张图片

监听函数如下所示

  mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
                if (id == R.id.login || id == EditorInfo.IME_NULL) {
                    attemptLogin();
                    return true;
                }
                return false;
            }
        });
但是加了断点测试的时候,id的值总是是EditorInfo.IME_NULL的值,而不是EditText控件中定义的R.id.login的值,去掉android:imeOptions也依然只响应EditorInfo.IME_NULL的值

网上查了一些资料后发现,如果用android:imeOptions的默认属性,那么在onEditorAction的回调函数中得到的id值就只能是EditorInfo中已经定义好的那些值

如果要响应自定义的android:imeActionId的值,必须自己定义一个resources文件,如integers.xml,在里面定义id的值



    100

控件EditText设置如下

即可在onEditorAction的回调函数中响应自己定义的id的值

(即如果设置android:imeActionId="@+id/login",回调函数中的id值不会是R.id.login)


参考资料:https://plus.google.com/+CyrilMottier/posts/FBZrVnbUCXZ 









你可能感兴趣的:(EditText设置IME动作问题)