Как отключить Button, если EditText пуст?
У меня есть EditText и кнопка в моем приложении.
При нажатии кнопки текст, введенный в EditText, добавляется в ListView.
Я хочу отключить кнопку, если EditText пуст. Как это сделать?
Это мой код для нажатия кнопки
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("");
}
});
}
Как я могу это сделать?
Ответы
Ответ 1
editText1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().trim().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
}
});
Ответ 2
Используйте TextChangedListener
и сначала отключите ImageButton
в onCreate().
Попробуйте это
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
}
});
}
}
Ответ 3
Просто проверьте состояние в onCreate
if (et.getText().toString().trim().equals("")){
button.setEnabled(false);
}
else{
button.setEnabled(true);
}
Ответ 4
Добавьте TextWatcher в свой EditText, чтобы при изменении текста внутри него кнопка включала или отключала себя.
Ответ 5
Изначально в onCreate()
отключите кнопку.
Затем добавьте текст addTextChangedListener
в текст редактирования. в пределах которого проверяется длина edittext и отключается, если она равна 0 или иным образом разрешает ее
Ответ 6
Я использовал 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) {
}
});
Ответ 7
в 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("");
}
});
Ответ 8
Если вы хотите отключить editText, вы будете использовать ниже код
editText.setEnabled(false);
editText.setFocusable(false);
Ответ 9
вы проверяете статус 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
}
});
Ответ 10
Если вы хотите использовать объектно-ориентированное решение и повторно использовать свой код
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);
}
});
Ответ 11
если кто-то задавался вопросом, вот версия кода 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
}
})
Ответ 12
Супер простое решение
Это очень легко реализовать в привязке данных. Я надеюсь, что вы знаете об этом в это время. Вы можете управлять кнопкой с EditText только через XML.
android:enabled="@{etName.text.length() > 0 && etPassword.text.length() > 5}"
Что эквивалентно
button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
-
Здесь &
HTML-сущность, которая обозначает &
. Там может быть любой оператор, как &.
-
etName
и etPassword
являются идентификаторами EditTexts.
Полный XML -
<LinearLayout
>
<EditText
android:id="@+id/etName"
/>
<EditText
android:id="@+id/etPassword"
/>
<Button
android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
/>
</LinearLayout>