EditText监听以及手机号校验

EditText监听思路

对想被监听的EditText使用焦点事件方法setOnFocusChangeListener()方法,当失去焦点时在方法中定义逻辑。

实例demo结合简单的手机号校验

EditText中监听接口TextWatcher,有三个成员方法

  • beforeTextChange():文本内容将要被改变的时候调用。

  • onTextChanged():文本内容改变过程中调用。

  • afterTextChanged():文本内容输入完成之后调用。

mEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                }
        });

手机号段校验

在afterTextChanged()方法中文本内容和定义的数组使用match()方法去比对。

第一位数的校验 使用startsWith("1")方法或者定义一个数组 String num = [1];
多位数的校验 通过数组 String num = [1] [345678] [23456] ...
11位手机号校验 通过正则表达式 String num = "[1][345678]\d{9}";

activity_main.xml

定义两个EditText

<EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入"
        android:maxLength="11"/>

    <EditText
        android:id="@+id/edit_text2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="试一试"
        />

mainActivity

对第一个EditText中的手机号进行校验,当点击第二个EditText时对第一个EditText中的手机号进行进一步校验,该demo主要针对多输入框的注册 页面。
public class MainActivity extends AppCompatActivity {

    EditText mEditText;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         mEditText = (EditText) findViewById(R.id.edit_text);

        //焦点事件
        mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {

                if(!hasFocus){
                    //校验11位手机号
                    String num = "[1][345678]\\d{9}";
                    //  获取EditText中的输入内容
                    final String inputText = mEditText.getText().toString();

                    if(inputText.length()==11 & inputText.matches(num)==false){

                            Toast.makeText(MainActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();

                    }else if(inputText.length()<11){
                        Toast.makeText(MainActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT).show();
                    }

                }else {

                }
            }
        });

        //EditText的点击事件
        mEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

                String num = "[1][345678]\\d{9}";

                if (TextUtils.isEmpty(s.toString())){
                    Toast.makeText(MainActivity.this, "手机号不能为空", Toast.LENGTH_SHORT).show();
                }else if(s.length()==11&s.toString().matches(num)==false){
                       Toast.makeText(MainActivity.this, "请输入正确的手机号码", Toast.LENGTH_SHORT).show();
                }
                }
        });

    }
}

推荐阅读更多精彩内容