Android monitors EditText changes

Monitor EditText changes

Use EditText's addTextChangedListener(TextWatcher watcher) method to monitor EditText. TextWatcher is an interface class, so the abstract method in TextWatcher must be implemented:

When the content in EditText changes, the TextChangedListener event is triggered and the abstract method in TextWatcher is called .

MainActivity.java

package com.lingdududu.watcher;  
 
import android.app.Activity;  
import android.app.AlertDialog;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.text.Editable;  
import android.text.TextWatcher;  
import android.util.Log;  
import android.widget.EditText;  
 
public class MainActivity extends Activity {  
    private EditText text;  
    String str;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
          
        text = (EditText)findViewById(R.id.text);  
        text.addTextChangedListener(textWatcher);  
    }  
      
    private TextWatcher textWatcher = new TextWatcher() {  
          
        @Override    
        public void afterTextChanged(Editable s) {     
            // TODO Auto-generated method stub     
            Log.d("TAG","afterTextChanged--------------->");   
        }   
          
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count,  
                int after) {  
            // TODO Auto-generated method stub  
            Log.d("TAG","beforeTextChanged--------------->");  
        }  
 
         @Override    
        public void onTextChanged(CharSequence s, int start, int before,     
                int count) {     
            Log.d("TAG","onTextChanged--------------->");    
            str = text.getText().toString();  
            try {  
                //if ((heighText.getText().toString())!=null)   
                Integer.parseInt(str);  
                  
            } catch (Exception e) {  
                // TODO: handle exception  
                showDialog();  
            }  
                              
        }                    
    };  
 
    private void showDialog(){  
        AlertDialog dialog;  
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);  
        builder.setTitle("消息").setIcon(android.R.drawable.stat_notify_error);  
        builder.setMessage("你输出的整型数字有误,请改正");  
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener(){  
            @Override 
            public void onClick(DialogInterface dialog, int which) {  
                // TODO Auto-generated method stub  
                  
            }                     
        });  
        dialog = builder.create();  
        dialog.show();  
    }
}   

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView    
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    android:text="请输入整型数字" 
    /> 
<EditText   
    android:id="@+id/text" 
    android:layout_width="fill_parent"   
    android:layout_height="wrap_content"   
    /> 
</LinearLayout> 


Rendering:

When we enter a number that is not an integer in the input box, the input box will pop up immediately to prompt you to correct it.

View the order in which these methods are called in LogCat:

beforeTextChanged-->onTextChanged-->onTextChanged

The second example implements the function of prompting how many characters can be entered in the text box.

package com.lingdududu.test;  
 
import android.app.Activity;  
import android.os.Bundle;  
import android.text.Editable;  
import android.text.TextWatcher;  
import android.view.View;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  
 
public class MainActivity extends Activity {  
 private Button clearBtn;  
 private EditText et;  
 private TextView tv;  
 final int MAX_LENGTH = 20;  
 int Rest_Length = MAX_LENGTH;  
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        tv =(TextView)findViewById(R.id.tv);  
        et = (EditText)findViewById(R.id.et);  
          
        clearBtn = (Button)findViewById(R.id.btn);  
 
        et.addTextChangedListener(new TextWatcher() {  
                          
            @Override 
            public void beforeTextChanged(CharSequence s, int start, int count,  
                    int after) {  
                tv.setText("还能输入"+Rest_Length+"个字");              
            }  
                          
            @Override 
            public void afterTextChanged(Editable s) {  
                tv.setText("还能输入"+Rest_Length+"个字");  
            }  
              
            @Override 
            public void onTextChanged(CharSequence s, int start, int before, int count) {  
                if(Rest_Length>0){  
                    Rest_Length = MAX_LENGTH - et.getText().length();  
                }  
            }             
        });  
        
        clearBtn.setOnClickListener(new Button.OnClickListener() {        
            @Override 
            public void onClick(View v) {  
                et.setText("");  
                Rest_Length = MAX_LENGTH;  
            }  
        });  
    }  
 } 

Rendering:

----------------------------------
Reprinted at: https://blog.51cto.com/liangruijun/ 729505

Guess you like

Origin blog.csdn.net/weixin_42602900/article/details/132815163