在我的聊天应用中,我正在添加用户的电话验证。因此,我希望用户输入数字时,该sendVerification按钮应为setEnabled(true)
,并且我将setEnabled(false)
设置为默认值,但是当我运行该应用程序时,它仍显示为启用状态,而无需输入数字
activity_phone_auth.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".PhoneAuthActivity">
<include
android:id="@+id/PhoneToolbar"
layout="@layout/app_bar">
</include>
<LinearLayout
android:id="@+id/DialLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/PhoneToolbar"
android:orientation="horizontal"
android:weightSum="10">
<ImageView
android:id="@+id/dial"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:padding="10dp"
android:src="@drawable/dial"
android:layout_weight="1"/>
<EditText
android:id="@+id/PhoneNumber"
android:layout_width="270dp"
android:layout_height="wrap_content"
android:hint="Phone Number"
android:layout_weight="8"
android:ems="10"
android:inputType="phone"/>
<ProgressBar
android:id="@+id/PhoneProgress"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout
android:id="@+id/LockLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/DialLayout"
android:orientation="horizontal"
android:weightSum="10">
<ImageView
android:id="@+id/lock"
android:layout_width="50dp"
android:layout_height="wrap_content"
android:padding="10dp"
android:src="@drawable/lock"
android:layout_weight="1"/>
<EditText
android:id="@+id/code"
android:layout_width="270dp"
android:layout_height="wrap_content"
android:hint="Verification Code"
android:layout_weight="8"/>
<ProgressBar
android:id="@+id/CodeProgress"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<TextView
android:id="@+id/VerificationText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="91dp"
android:text="A verification code will be sent to your phone number" />
<Button
android:id="@+id/sendVerification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="23dp"
android:backgroundTint="#FF0000"
android:text="Send Verification" />
</RelativeLayout>
PhoneAuthActivity.java
package com.jimmytrivedi.lapitchat;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import com.google.firebase.FirebaseException;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import java.util.concurrent.TimeUnit;
public class PhoneAuthActivity extends AppCompatActivity {
private LinearLayout DialLayout, LockLayout;
private EditText PhoneNumber, code;
private ProgressBar PhoneProgress, CodeProgress;
private Button sendVerification;
private Toolbar PhoneToolbar;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks mCallbacks;
private String number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_phone_auth);
DialLayout = findViewById(R.id.DialLayout);
LockLayout = findViewById(R.id.LockLayout);
PhoneNumber = findViewById(R.id.PhoneNumber);
code = findViewById(R.id.code);
PhoneProgress = findViewById(R.id.PhoneProgress);
CodeProgress = findViewById(R.id.CodeProgress);
sendVerification = findViewById(R.id.sendVerification);
PhoneToolbar = findViewById(R.id.PhoneToolbar);
PhoneProgress.setVisibility(View.INVISIBLE);
CodeProgress.setVisibility(View.INVISIBLE);
sendVerification.setEnabled(false);
setSupportActionBar(PhoneToolbar);
getSupportActionBar().setTitle("Welcome to Phone Verification");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
number = PhoneNumber.getText().toString();
if (number != null) {
sendVerification.setEnabled(true);
} else {
sendVerification.setEnabled(false);
}
sendVerification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PhoneNumber.setEnabled(false);
PhoneProgress.setVisibility(View.VISIBLE);
PhoneAuthProvider.getInstance().verifyPhoneNumber(
number,
60,
TimeUnit.SECONDS,
PhoneAuthActivity.this,
mCallbacks
);
}
});
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) {
}
@Override
public void onVerificationFailed(FirebaseException e) {
}
};
}
}
答案 0 :(得分:0)
替换
number = PhoneNumber.getText().toString();
if (number != null) {
sendVerification.setEnabled(true);
} else {
sendVerification.setEnabled(false);
}
具有:
number = PhoneNumber.getText().toString();
if (number.isEmpty()) {
sendVerification.setEnabled(false);
} else {
sendVerification.setEnabled(true);
}
答案 1 :(得分:0)
默认使用sendVerification.setEnabled(false)
方法设置onCreate(...)
,然后像这样应用TextChangedListener
PhoneNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.toString().equalsIgnoreCase("")) {
sendVerification.setEnabled(false);
} else {
sendVerification.setEnabled(true);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
电话号码为空时,它将自动禁用sendVerification按钮
答案 2 :(得分:0)
使用TextWatcher()知道用户何时在编辑文本中输入文本。这样做:-
替换此:-
number = PhoneNumber.getText().toString();
if (number != null) {
sendVerification.setEnabled(true);
}
else {
sendVerification.setEnabled(false);
}
与此:-
PhoneNumber.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String text = charSequence.toString();
if(!text.isEmpty()){
sendVerification.setEnabled(true);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
sendVerification.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!PhoneNumber.getText().toString().isEmpty()){
number = PhoneNumber.getText().toString();
PhoneNumber.setEnabled(false);
PhoneProgress.setVisibility(View.VISIBLE);
PhoneAuthProvider.getInstance().verifyPhoneNumber(
number,
60,
TimeUnit.SECONDS,
PhoneAuthActivity.this,
mCallbacks
);
}
else {
Toast.makeText(PhoneAuthActivity.this, "Empty Field", Toast.LENGTH_SHORT).show();
}
}
});