2011-11-22 58 views

回答

30

你必须addTextChangedListenerEditText

像这样:

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); 
    } 

希望它能帮助。

+1

TextEditor的内容,我认为enableSubmitIfReady()的长度应该在onTextChanged – rohit

+2

很好的回答,除了我喜欢看这一类的if-else模式简化成:' yourbutton.setEnabled(isReady);' – mharper

+0

如何在不参考按钮的情况下工作?你有一行yourbutton ...但你的按钮在这个代码的任何地方都没有参考,所以它如何工作? –

1

单独使用afterTextChanged的问题是在应用程序启动时,它不能禁用按钮,直到您开始键入您的EditText。

这是我如何实施我的,它的工作原理。打电话给你活动的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 
} 
1

你可以做什么@Udaykiran说,但使用arg0.length()而是这里面的方法。

Editable还包含改变