[英]In Android, how to make Login button disable with respect to EditText?
If EditText
is empty then Login Button
has to be disabled. 如果EditText
为空,则必须禁用登录Button
。 And if EditText
has some texts then Login Button
has to be enabled. 如果EditText
有一些文本,则必须启用“登录Button
。 Well you can see this method on Instagram Login. 好吧,您可以在Instagram登录上看到此方法。
Both fields are empty, Sign in Button
is DISABLED. 两个字段均为空,“登录Button
已禁用。
Here Password field is empty, so still Sign in Button
is DISABLED. 这里的密码字段为空,因此仍然禁用登录Button
。
Here both Username and Password field is not empty, So Sign in Button
is ENABLED. 这里的用户名和密码字段都不为空,因此登录Button
已启用。
how to achieve these steps?? 如何实现这些步骤? here is my code and it doesn't work.. 这是我的代码,它不起作用..
EditText et1,et2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_check);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
Button b = (Button) findViewById(R.id.button1);
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
if(s1.equals("")|| s2.equals("")){
b.setEnabled(false);
} else {
b.setEnabled(true);
}
}
heres what you are looking for : 这是您正在寻找的:
private EditText et1,et2;
// create a textWatcher member
private TextWatcher mTextWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
// check Fields For Empty Values
checkFieldsForEmptyValues();
}
};
void checkFieldsForEmptyValues(){
Button b = (Button) findViewById(R.id.button1);
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
if(s1.equals("")|| s2.equals("")){
b.setEnabled(false);
} else {
b.setEnabled(true);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_check);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
// set listeners
et1.addTextChangedListener(mTextWatcher);
et2.addTextChangedListener(mTextWatcher);
// run once to disable if empty
checkFieldsForEmptyValues();
}
You need to implement TextWatcher on EditText
to achieve the result. 您需要在EditText
上实现TextWatcher才能获得结果。
EditText et1, et2;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
b = (Button) findViewById(R.id.button1);
checkValidation();
et1.addTextChangedListener(mWatcher);
et2.addTextChangedListener(mWatcher);
}
private void checkValidation() {
// TODO Auto-generated method stub
if ((TextUtils.isEmpty(et1.getText()))
|| (TextUtils.isEmpty(et2.getText())))
b.setEnabled(false);
else
b.setEnabled(true);
}
TextWatcher mWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
checkValidation();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
You need to track user's action inside EditText
using TextWatcher
object: 您需要使用TextWatcher
对象在EditText
内跟踪用户的操作:
myEditText.addTextChangedListener(new TextWatcher()
{
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
if (s.length() > 1)
{
//enable button
} else
//disable
}
});
try this: 尝试这个:
EditText et1,et2;
Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_check);
et1 = (EditText) findViewById(R.id.editText1);
et2 = (EditText) findViewById(R.id.editText2);
b = (Button) findViewById(R.id.button1);
et1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
if(s1.equals("") && s2.equals("")){
b.setEnabled(false);
}
else if(!s1.equals("")&&s2.equals("")){
b.setEnabled(false);
}
else if(!s2.equals("")&&s1.equals(""){
b.setEnabled(false);
}
else {
b.setEnabled(true);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
et2.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String s1 = et1.getText().toString();
String s2 = et2.getText().toString();
if(s1.equals("") && s2.equals("")){
b.setEnabled(false);
}
else if(!s1.equals("")&&s2.equals("")){
b.setEnabled(false);
}
else if(!s2.equals("")&&s1.equals(""){
b.setEnabled(false);
}
else {
b.setEnabled(true);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
}
You need to attach a TextWatcher that is called whenever the text in one of the EditText fields is changed. 您需要附加一个TextWatcher,只要EditText字段之一中的文本发生更改,就会调用该TextWatcher。
private EditText mName;
private EditText mPassword;
private Button mButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login_check);
mName = (EditText) findViewById(R.id.editText1);
mPassword = (EditText) findViewById(R.id.editText2);
mButton = (Button) findViewById(R.id.button1);
mName.addTextChangedListener(mWatcher);
mPassword.addTextChangedListener(mWatcher);
}
private TextWatcher mWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
boolean nameNotEmpty = mName.getText().length()>0;
boolean pwNotEmpty = mPassword.getText().length()>0;
mButton.setEnabled(nameNotEmpty && pwNotEmpty);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
};
private TextWatcher mPhoneNumberEtWatcher = 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.length() >= 10) {
mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone_activate));
if (mPasswordEt.getText().toString().length() >= 5) {
mLoginBtn.setEnabled(true);
}
} else {
mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone));
mLoginBtn.setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
};
mPhoneNumberEt.addTextChangedListener(mPhoneNumberEtWatcher);
You should use TextWatcher. 您应该使用TextWatcher。 That will call method after typing of user. 键入用户后将调用method。 And you can check length and somthing else of your edit text. 您还可以检查编辑文本的长度和其他内容。
try this 尝试这个
if(s1.equals("") && s2.equals(""))
{
b.setEnabled(true);
// to change color of the button you need to apply style to the button[here refer custom bg][1]
}
else
{
b.setEnabled(false);
//do nothing or display toast msg
}
I only want to add that the check will NOT work if the InputType
of the EditText
is a password (or similar) and the fuction to proof the length of the text (see other answers) is called from 我只想补充一点,检查将,如果不工作InputType
的的EditText
是一个密码(或类似)和机能的研究,以证明文本(见其他答案)的长度是从所谓的
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {...}
So it is important to call the check from 因此,重要的是请致电
@Override
public void afterTextChanged(Editable s) {...}
hey if want to use the code cut the button needs to change color if the editText1_id and the editText1_passcode is in and in 4 digits 嘿,如果要使用代码剪切,如果editText1_id和editText1_passcode为4位数字,则按钮需要更改颜色
checkValidation();
editText1_id.addTextChangedListener(mWatcher);
editText1_passcode.addTextChangedListener(mWatcher);
}
private void checkValidation() {
// TODO Auto-generated method stub
if ((TextUtils.isEmpty(editText1_id.getText()))
|| (TextUtils.isEmpty(editText1_passcode.getText())))
loginbtn.setEnabled(false);
else
loginbtn.setEnabled(true);
}
TextWatcher mWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
checkValidation();
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
};
}
Setting up Button dependent on EditText is Super Easy in Data-Binding . 在数据绑定中,根据EditText设置Button非常容易 。 You can manage it via only XML. 您只能通过XML进行管理。
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
Here &
这里&
is HTML entity which denotes to &
. 是HTML实体 ,表示&
。 There can be any operator like &. 可以有&之类的任何运算符。
etName
& etPassword
are EditTexts ids. etName
和etPassword
是EditTexts ID。
Complete XML - 完整的XML-
<LinearLayout
>
<EditText
android:id="@+id/etName"
/>
<EditText
android:id="@+id/etPassword"
/>
<Button
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
/>
</LinearLayout>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.