【问题标题】:Enable and disable Button according to the text in EditText in Android根据Android中EditText中的文字启用和禁用Button
【发布时间】:2012-01-03 17:52:37
【问题描述】:

如果 EditText 中的单词少于 3 个单词,我想通过 Button 禁用,如果 EditText 中的单词超过 3 个单词,那么我想启用它以便它可以被点击。

有人可以帮我吗?

【问题讨论】:

    标签: android button android-edittext


    【解决方案1】:

    你必须addTextChangedListener 到你的EditText

    像这样:

    yourEditText.addTextChangedListener(new TextWatcher() {
          @Override
          public void afterTextChanged(Editable arg0) {
             enableSubmitIfReady();
          }
    
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {
          }
    
          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {
          }
        });
    

    在那个方法中,你应该这样做:

     public void enableSubmitIfReady() {
    
        boolean isReady = yourEditText.getText().toString().length() > 3;    
        yourbutton.setEnabled(isReady);
      }
    

    希望对你有帮助。

    【讨论】:

    • 我认为 enableSubmitIfReady() 应该在 onTextChanged 中
    • 很好的答案,除了我更喜欢看到那种 if-else 模式简化为:yourbutton.setEnabled(isReady);
    • 在不引用按钮的情况下如何工作?你有 yourbutton... 这一行,但是 yourbutton 在这段代码中的任何地方都没有引用,所以它如何工作?
    • 我认为您可以通过将enableSubmitIfReady() 移动到onTextChanged() 并将yourEditText.getText().toString().length() 替换为s.length() 来稍微简化此操作。看here
    【解决方案2】:

    单独使用 afterTextChanged 的​​问题是在应用程序启动时,它最初无法禁用按钮,直到您开始输入 EditText。

    这就是我实现我的方式并且效果很好。在 Activity 的 onCreate 方法中调用此方法

    void watcher(final EditText message_body,final Button Send)
    {
        final TextView txt = (TextView) findViewById(R.id.txtCounter);
        message_body.addTextChangedListener(new TextWatcher()
        {
            public void afterTextChanged(Editable s) 
            { 
                txt.setText(message_body.length() + " / 160"); //This is my textwatcher to update character left in my EditText
                if(message_body.length() == 0)
                    Send.setEnabled(false); //disable send button if no text entered 
                else
                    Send.setEnabled(true);  //otherwise enable
    
            }
            public void beforeTextChanged(CharSequence s, int start, int count, int after){
            }
            public void onTextChanged(CharSequence s, int start, int before, int count){
            }
        }); 
        if(message_body.length() == 0) Send.setEnabled(false);//disable at app start
    }  
    

    【讨论】:

      【解决方案3】:

      您可以按照@Udaykiran 所说的做,但改用arg0.length()

      Editable 还包含被更改的TextEditor 内容的长度

      【讨论】:

        猜你喜欢
        • 2016-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-16
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        相关资源
        最近更新 更多