Android imeActionId是如何工作的?

Android imeActionId是如何工作的?,android,Android,我是android开发新手,刚刚在EditText上使用了imeActionId属性。为什么要检查onEditorActionListener中的id是否等于提供给imeActionId的值 我的代码如下: public class RegisterActivity extends AppCompatActivity { // Constants public static final String CHAT_PREFS = "ChatPrefs"; public st

我是android开发新手,刚刚在
EditText
上使用了
imeActionId
属性。为什么要检查
onEditorActionListener
中的id是否等于提供给
imeActionId
的值

我的代码如下:

public class RegisterActivity extends AppCompatActivity {

    // Constants
    public static final String CHAT_PREFS = "ChatPrefs";
    public static final String DISPLAY_NAME_KEY = "username";

    // TODO: Add member variables here:
    // UI references.
    private AutoCompleteTextView mEmailView;
    private AutoCompleteTextView mUsernameView;
    private EditText mPasswordView;
    private EditText mConfirmPasswordView;

    // Firebase instance variables
    private FirebaseAuth mAuth;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        mEmailView = (AutoCompleteTextView) findViewById(R.id.register_email);
        mPasswordView = (EditText) findViewById(R.id.register_password);
        mConfirmPasswordView = (EditText) findViewById(R.id.register_confirm_password);
        mUsernameView = (AutoCompleteTextView) findViewById(R.id.register_username);

        // Keyboard sign in action
        mConfirmPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {enter code h`enter code here`ere
            @Override
            public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
                if (id == R.integer.register_form_finished || id == EditorInfo.IME_NULL) {
                    attemptRegistration();
                    return true;
                }
                return false;
            }

        });

        // TODO: Get hold of an instance of FirebaseAuth

        mAuth = FirebaseAuth.getInstance();
    }

    // Executed when Sign Up button is pressed.
    public void signUp(View v) {
        attemptRegistration();
    }

    private void attemptRegistration() {

        // Reset errors displayed in the form.
        mEmailView.setError(null);
        mPasswordView.setError(null);

        // Store values at the time of the login attempt.
        String email = mEmailView.getText().toString();
        String password = mPasswordView.getText().toString();

        boolean cancel = false;
        View focusView = null;

        // Check for a valid password, if the user entered one.
        if (TextUtils.isEmpty(password) || !isPasswordValid(password)) {
            mPasswordView.setError(getString(R.string.error_invalid_password));
            focusView = mPasswordView;
            cancel = true;
        }

        // Check for a valid email address.
        if (TextUtils.isEmpty(email)) {
            mEmailView.setError(getString(R.string.error_field_required));
            focusView = mEmailView;
            cancel = true;
        } else if (!isEmailValid(email)) {
            mEmailView.setError(getString(R.string.error_invalid_email));
            focusView = mEmailView;
            cancel = true;
        }

        if (cancel) {
            // There was an error; don't attempt login and focus the first
            // form field with an error.
            focusView.requestFocus();
        } else {
            // TODO: Call create FirebaseUser() here
            createFirebaseUser();
        }
    }

    private boolean isEmailValid(String email) {
        // You can add more checking logic here.
        return email.contains("@");
    }

    private boolean isPasswordValid(String password) {
        //TODO: Add own logic to check for a valid password (minimum 6 characters)
        String confirmPassword = mConfirmPasswordView.getText().toString();

        return confirmPassword.equals(password) && password.length() > 5 ;
    }

    // TODO: Create a Firebase user
    private void createFirebaseUser(){

        String email = mEmailView.getText().toString();
        String password = mPasswordView.getText().toString();
        mAuth.createUserWithEmailAndPassword(email,password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {

                    Log.d("FlashChat", "create User onComplete: " + task.isSuccessful());

                if (!task.isSuccessful()){
                    Log.d("Flaschat","user creation failed");
                    showErrorDialog("Registration attempt failed");
                }else {
                    saveDisplayName();
                    Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
                    finish();
                    startActivity(intent);
                }
            }
        });

    }
    // TODO: Save the display name to Shared Preferences
        private void saveDisplayName(){

        String displayName = mUsernameView.getText().toString();
            SharedPreferences prefs = getSharedPreferences(CHAT_PREFS,0);
            prefs.edit().putString(DISPLAY_NAME_KEY,displayName).apply();

        }

    // TODO: Create an alert dialog to show in case registration failed
     private void showErrorDialog(String message){

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Oops");
            builder.setMessage(message);
            builder.setPositiveButton(android.R.string.ok,null);
            builder.setIcon(android.R.drawable.ic_dialog_alert);
            builder.show();
    }

    }
公共类注册表活动扩展了AppCompatActivity{
//常数
公共静态最终字符串CHAT\u PREFS=“ChatPrefs”;
公共静态最终字符串显示\u NAME\u KEY=“username”;
//TODO:在此处添加成员变量:
//用户界面引用。
私有AutoCompleteTextView mEmailView;
私有自动完成文本视图mUsernameView;
私有编辑文本mPasswordView;
私有EditText mConfirmPasswordView;
//Firebase实例变量
私人消防队;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
mEmailView=(AutoCompleteTextView)findviewbyd(R.id.register\u email);
mPasswordView=(EditText)findViewById(R.id.register\u密码);
mConfirmPasswordView=(EditText)findViewById(R.id.register\u confirm\u password);
mUsernameView=(AutoCompleteTextView)findViewById(R.id.register\u用户名);
//键盘登录操作
mConfirmPasswordView.setOnEditorActionListener(新建TextView.OnEditorActionListener(){输入代码h`在此处输入代码`
@凌驾
公共布尔onEditorAction(TextView TextView、int id、KeyEvent KeyEvent){
if(id==R.integer.register_form_finished | | id==EditorInfo.IME_NULL){
尝试注册();
返回true;
}
返回false;
}
});
//TODO:获取FirebaseAuth的实例
mAuth=FirebaseAuth.getInstance();
}
//按下“注册”按钮时执行。
公共无效注册(视图五){
尝试注册();
}
私有无效注册(){
//重置表单中显示的错误。
mEmailView.setError(null);
mPasswordView.setError(null);
//在尝试登录时存储值。
字符串email=mEmailView.getText().toString();
字符串密码=mPasswordView.getText().toString();
布尔取消=假;
视图焦点视图=空;
//如果用户输入了有效密码,请检查密码是否有效。
if(TextUtils.isEmpty(密码)| |!isPasswordValid(密码)){
mPasswordView.setError(getString(R.string.error\u密码无效));
focusView=mPasswordView;
取消=真;
}
//检查有效的电子邮件地址。
如果(TextUtils.isEmpty(电子邮件)){
setError(getString(R.string.error_字段_必填));
focusView=mEmailView;
取消=真;
}如果(!isEmailValid(电子邮件)){
mEmailView.setError(getString(R.string.error\u无效的电子邮件));
focusView=mEmailView;
取消=真;
}
如果(取消){
//出现错误;请不要尝试登录并在第一次登录时集中注意力
//表单字段有错误。
focusView.requestFocus();
}否则{
//TODO:在此处调用create FirebaseUser()
createFirebaseUser();
}
}
私有布尔值isEmailValid(字符串电子邮件){
//您可以在此处添加更多检查逻辑。
返回电子邮件。包含(“@”);
}
私有布尔值isPasswordValid(字符串密码){
//TODO:添加自己的逻辑以检查有效密码(至少6个字符)
字符串confirmPassword=mConfirmPasswordView.getText().toString();
返回confirmPassword.equals(password)和&password.length()>5;
}
//TODO:创建Firebase用户
私有void createFirebaseUser(){
字符串email=mEmailView.getText().toString();
字符串密码=mPasswordView.getText().toString();
mAuth.createUserWithEmailAndPassword(电子邮件,密码).addOnCompleteListener(这是新的OnCompleteListener()){
@凌驾
未完成的公共void(@NonNull任务){
Log.d(“FlashChat”,“创建用户onComplete:+task.isSuccessful());
如果(!task.issusccessful()){
Log.d(“Flaschat”,“用户创建失败”);
“注册”对话框(“注册尝试失败”);
}否则{
saveDisplayName();
意向意向=新意向(RegisterActivity.this、LoginActivity.class);
完成();
星触觉(意向);
}
}
});
}
//TODO:将显示名称保存到共享首选项
私有void saveDisplayName(){
字符串displayName=mUsernameView.getText().toString();
SharedPreferences=getSharedPreferences(聊天室首选项,0);
prefs.edit().putString(DISPLAY_NAME_KEY,displayName).apply();
}
//TODO:创建警报对话框以在注册失败时显示
专用对话框(字符串消息){
AlertDialog.Builder=新建AlertDialog.Builder(此);
建筑商。设置标题(“Oops”);
builder.setMessage(message);
setPositiveButton(android.R.string.ok,null);
builder.setIcon(android.R.drawable.ic\u对话框\u警报);
builder.show();
}
}
XML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              android:paddingBottom="@dimen/activity_vertical_margin"
              android:paddingLeft="@dimen/activity_horizontal_margin"
              android:paddingRight="@dimen/activity_horizontal_margin"
              android:paddingTop="@dimen/activity_vertical_margin"
              android:background="@drawable/background_login_min"
              tools:context="com.shubhamkathuria.flashchatnewfirebase.RegisterActivity"
              android:gravity="top">



        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@color/white"
            >

            <AutoCompleteTextView
                android:id="@+id/register_username"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textSize="25sp"
                android:hint="@string/prompt_username"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                android:inputType="textNoSuggestions"
                android:imeOptions="actionNext"
                android:maxLines="1"
                android:textIsSelectable="false"
                android:textStyle="bold"/>

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@color/white"
            >

            <AutoCompleteTextView
                android:id="@+id/register_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/prompt_email"
                android:textColor="@color/white"
                android:textSize="25sp"
                android:imeOptions="actionNext"
                android:textColorHint="@color/white"
                android:inputType="textEmailAddress"
                android:maxLines="1"
                android:textIsSelectable="false"
                android:textStyle="bold"/>

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@color/white"
            >

            <EditText
                android:id="@+id/register_password"
                android:textSize="25sp"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                android:layout_width="match_parent"
                android:imeOptions="actionNext"
                android:layout_height="wrap_content"
                android:hint="@string/prompt_password"
                android:inputType="textPassword"
                android:maxLines="1"
                android:textStyle="bold"/>

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@color/white"
            >

            <EditText
                android:id="@+id/register_confirm_password"
                android:textColor="@color/white"
                android:textSize="25sp"
                android:textColorHint="@color/white"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/prompt_password_again"
                android:imeActionId="@integer/register_form_finished"
                android:imeActionLabel="@string/action_sign_up"
                android:imeOptions="actionUnspecified"
                android:inputType="textPassword"
                android:maxLines="1"
                android:textStyle="bold"/>

        </android.support.design.widget.TextInputLayout>

        <Button
            android:id="@+id/register_sign_up_button"
            style="?android:textAppearanceMedium"
            android:background="@color/white"
            android:textColor="@color/green"
            android:onClick="signUp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:text="@string/action_sign_up"
            android:textStyle="bold"/>



</LinearLayout>


在您的代码中,这只是为了确保当用户在注册确认密码编辑文本并按下键盘上的“完成”按钮时,它应该调用尝试注册()方法。

请分享需要的信息code@Rah