如果EditText为空,如何禁用Button?

Nev*_*aeh 14 android button

我的应用程序中有一个EditText和一个Button.

单击该按钮时,EditText中输入的文本将添加到ListView.

如果EditText为空,我想禁用Button.如何做到这一点?

这是我点击按钮的代码

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("");

                    }
            });
            }
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点 ?

dru*_*abs 39

    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

        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 您可能想首先将按钮设置为 false (2认同)

Chi*_*ori 8

在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

        }
    });

}

}
Run Code Online (Sandbox Code Playgroud)


Ste*_*evo 6

这是 Kotlin 中的一个超级简单的答案。

只需将“EditText”和“Button”替换为您自己的即可。

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) {
            }
        })
Run Code Online (Sandbox Code Playgroud)

对于多个 EditTexts 去

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) {
            }
        })
        }
Run Code Online (Sandbox Code Playgroud)


Inn*_*ler 5

简单只需检查onCreate中的条件

if (et.getText().toString().trim().equals("")){
  button.setEnabled(false);
}
else{
button.setEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)


Khe*_*raj 5

简单的解决方案

这在Data-Binding 中很容易实现。我希望你在这个时候意识到这一点。您可以仅通过 XML 使用 EditText 管理 Button。

android:enabled="@{etName.text.length() > 0 &amp;&amp; etPassword.text.length() > 5}"
Run Code Online (Sandbox Code Playgroud)

这相当于

button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
Run Code Online (Sandbox Code Playgroud)
  • &amp;是表示 to 的HTML 实体&。可以有像 & 这样的任何运算符。

  • etName&etPassword是 EditTexts id。

完整的 XML -

<LinearLayout
    >

    <EditText
        android:id="@+id/etName"
        />

    <EditText
        android:id="@+id/etPassword"
        />

    <Button
        android:enabled="@{etName.text.length() > 5 &amp;&amp; etPassword.text.length() > 5}"
        />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)