imeActionId如何工作?

时间:2018-08-03 06:30:03

标签: android

我是Android开发的新手,只是在imeActionId上使用了EditText属性。为什么我们要检查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();
    }

    }

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>

1 个答案:

答案 0 :(得分:0)

在您的代码中,这只是为了确保当用户位于 register_confirm_password 编辑文本中并按下键盘的“完成”按钮时,它应该调用 attemptRegistration()方法。