Android imeActionId是如何工作的?
我是android开发新手,刚刚在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
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