Android 如果EditText为空,如何禁用按钮?
我的应用程序中有一个EditText和一个按钮 单击按钮时,在EditText中输入的文本将添加到ListView 如果编辑文本为空,我想禁用该按钮。如何操作 这是我点击按钮的代码Android 如果EditText为空,如何禁用按钮?,android,button,Android,Button,我的应用程序中有一个EditText和一个按钮 单击按钮时,在EditText中输入的文本将添加到ListView 如果编辑文本为空,我想禁用该按钮。如何操作 这是我点击按钮的代码 ImageButton imb=(ImageButton)findViewById(R.id.btn_send); imb.setOnClickListener(new OnClickListener() { @Override
ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
imb.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
EditText et = (EditText)findViewById(R.id.EditText1);
String str = et.getText().toString();
web1.add(str);
Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
adapter1.notifyDataSetChanged();
et.setText("");
}
});
}
如何执行此操作?很简单,只需在onCreate中检查条件即可
if (et.getText().toString().trim().equals("")){
button.setEnabled(false);
}
else{
button.setEnabled(true);
}
将TextWatcher添加到EditText中,这样当您更改其中的文本时,您的按钮可以启用或禁用自身。在Oncreate()上,单击按钮之前,您应该检查以下条件:
ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
EditText et = (EditText)findViewById(R.id.EditText1);
if(et.getText().toString().equals("")
{
imb.setEnabled(false);
}
imb.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
EditText et = (EditText)findViewById(R.id.EditText1);
String str = et.getText().toString();
web1.add(str);
Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
adapter1.notifyDataSetChanged();
et.setText("");
}
});
最初在onCreate()
中禁用该按钮。
然后在编辑文本中添加一个
addTextChangedListener
。在该范围内,检查edittext长度并禁用它(如果它为0),或者启用它当您要禁用edittext时,将使用下面的代码
editText.setEnabled(false);
editText.setFocusable(false);
在onCreate()中使用
TextChangedListener
并首先禁用ImageButton
试试这个
public class MyActivity extends Activity {
ImageButton imb;
EditText et;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imb = (ImageButton) findViewById(R.id.btn_send);
et = (EditText) findViewById(R.id.EditText1);
imb.setEnabled(false); // set button disable initially
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.toString().equals("")) {
imb.setEnabled(false);
} else {
imb.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
}
});
}
}
您可以使用文本监视程序在运行时检查edittext的状态。 下面的代码计算文本长度,如果长度为零,则禁用。 使用此代码:
EditText mEditText = new EditText(this);
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
if (s.length() == 0) {
button.setEnabled(false);
}
else {
button.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
}
});
我使用了
TextUtils
作为简洁的解决方案:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
button.setEnabled(!TextUtils.isEmpty(s.toString().trim()));
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
如果您想使用面向对象的解决方案并重用代码
public abstract class EmptyTextWatcher implements TextWatcher
{
public abstract void onEmptyField();
public abstract void onFilledField();
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (s.toString().trim().length() == 0)
{
onEmptyField();
} else
{
onFilledField();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
}
}
所以你可以用它来做
textView.addTextChangedListener(new EmptyTextWatcher()
{
@Override
public void onEmptyField()
{
button.setEnabled(false);
}
@Override
public void onFilledField()
{
button.setEnabled(true);
}
});
如果有人想知道这是kotlin版本的代码
editText1.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
if (s.toString().trim({ it <= ' ' }).isEmpty())
{
button.setEnabled(false)
}
else
{
button.setEnabled(true)
}
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {
// TODO Auto-generated method stub
}
override fun afterTextChanged(s: Editable) {
// TODO Auto-generated method stub
}
})
editText1.addTextChangedListener(对象:TextWatcher{
重写更改的上下文(s:CharSequence,start:Int,before:Int,count:Int){
if(s.toString().trim({这是一个简单的解决方案
这很容易在中实现。我希望您现在能意识到这一点。您可以仅通过XML使用EditText管理按钮
android:enabled="@{etName.text.length() > 0 && etPassword.text.length() > 5}"
这相当于
button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
- 这里的
&;
表示&
。可以有任何类似于&的运算符
etName
和etPassword
是编辑文本ID
完整的XML-
<LinearLayout
>
<EditText
android:id="@+id/etName"
/>
<EditText
android:id="@+id/etPassword"
/>
<Button
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
/>
</LinearLayout>
这里有一个关于Kotlin的超级简单的答案。
只需将“编辑文本”和“按钮”替换为您自己的
Button.isEnabled = false
EditText.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
Button.isEnabled = s.toString().trim{ it <= ' ' }.isNotEmpty()
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {
}
override fun afterTextChanged(s: Editable) {
}
})
OP需要一个textWatcher.if我是对的s.toString().trim({itonTextChanged
如果用户未在编辑中键入内容,则不会调用它。除了在onClick
中处理之外,我如何处理它?您可能首先要将按钮设置为false。按钮是否在满足这些条件后再次启用?如果不是,我认为您的答案是无用的或不相关的。
Button.isEnabled = false
EditText.addTextChangedListener(object: TextWatcher {
override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
Button.isEnabled = s.toString().trim{ it <= ' ' }.isNotEmpty()
}
override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
after:Int) {
}
override fun afterTextChanged(s: Editable) {
}
})
Button.isEnabled = false
val editTexts = listOf(editText1, editText2, editText3, editText4, editText5, editText6)
for (editText in editTexts) {
editText.addTextChangedListener(object : TextWatcher {
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
var et1 = editText1.text.toString().trim()
var et2 = editText2.text.toString().trim()
var et3 = editText3.text.toString().trim()
var et4 = editText4.text.toString().trim()
var et5 = editText5.text.toString().trim()
var et6 = editText6.text.toString().trim()
computeBtn.isEnabled = et1.isNotEmpty()
&& et2.isNotEmpty()
&& et3.isNotEmpty()
&& et4.isNotEmpty()
&& et5.isNotEmpty()
&& et6.isNotEmpty()
}
override fun beforeTextChanged(
s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun afterTextChanged(
s: Editable) {
}
})
}