EditText设置监听

在开发中有的需要对编辑框进行监听如果编辑框中没有值,登录按钮就是无法点击并且颜色为灰色,当编辑框中的值满足添加的时候,按钮可以点击同时颜色发生改变,

由于自己是个菜鸟,.代码中也有注释.也比较简单.有什么bug希望各位大神也能指点一二.

                                           

activity:这个类里面主要包含了手机号码的验证.和编辑框输入个数的判定

public class MainActivity extends AppCompatActivity {

    private EditText etAcc;
    private EditText etPassf;
    private Button button;
    //用于记录当前编辑框有几个已经存在文本
    private int fontCount = 0;
    //一个表示判断是否满足正则表达式
    boolean flag = false;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etAcc = (EditText) findViewById(R.id.et_account);
        etPassf = (EditText) findViewById(R.id.et_password);
        button = (Button) findViewById(R.id.bt_main);
//登录页面后首先判断编辑框中是否有值
        isEmptyEdit();
//        检测手机号
        /*
        etAcc.addTextChangedListener(new BaseTextWatcher(){
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//                super.onTextChanged(charSequence, i, i1, i2);
//                Toast.makeText(MainActivity.this, ">>>>>>" + RegularUtil.isMobileNO(charSequence.toString()), Toast.LENGTH_SHORT).show();
                System.out.println("........." + RegularUtil.isMobileNO(charSequence.toString()));

                if (RegularUtil.isMobileNO(charSequence.toString())) {
                    fontCount++;
                    flag = true;
                }
                if(flag && !RegularUtil.isMobileNO(charSequence.toString())){
                    flag = false;
                    fontCount --;
                }
                if (i == 0 && i2 == 0) {
                    fontCount--;
                }
                notifyChange();
            }
        });
        */
        //验证账号或者密码是否满足条件,一个是自定义的监听.一个是使用默认的监听
        etAcc.addTextChangedListener(new BaseTextWatcher(){
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                boolean matchesNum = RegularUtil.MatchesNum(charSequence.toString(), 5, 20);
//                super.onTextChanged(charSequence, i, i1, i2);
                System.out.println("........r1......" + i1);
                System.out.println("........r2......" + i2);
                System.out.println("........r......" + i);
                if (matchesNum&& !flag ) {//判断是否匹配正则表达式同时标示是否为false
                    fontCount++;
                    flag = true;
                }

                if(flag && !matchesNum){//如果以前是满足正则条件.现在由于一定的改动不满足条件就让标示的个数减一
                    flag = false;
                    fontCount --;
                }
            notifyChange();//提醒当前已经发生了改变.
            }
        });
        etPassf.addTextChangedListener(textWatcher);

        //判断编辑框的内容是否为空
    }

    /**
     * 实现编辑框改变的监听
     */
    private TextWatcher textWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            //查看输出的结果对三个数据进行判断解析
            System.out.println("........r1......" + i1);
            System.out.println("........r2......" + i2);
            System.out.println("........r......" + i);
            System.out.println("before......." + charSequence);

            System.out.println(".........."+RegularUtil.isMobileNO(charSequence.toString()));
            if(RegularUtil.isMobileNO(charSequence.toString())){
                Toast.makeText(MainActivity.this, "......正确了" , Toast.LENGTH_SHORT).show();
            }
            if (i2 > 0 && i == 0) {
                fontCount++;
            }
            if (i == 0 && i2 == 0 && fontCount != 0) {//防止fontconnt减少为负导致异常
                fontCount--;
            }
            notifyChange();
        }

        @Override
        public void afterTextChanged(Editable editable) {
        }
    };

    /**
     * 提醒数值已经改变判断当前是否满足条件
     */
    private void notifyChange() {
        System.out.println(".........notify ......" + fontCount);
        if (fontCount >= 2) {
            button.setEnabled(true);
        } else {
            button.setEnabled(false);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        etAcc.setText("");
        etPassf.setText("");
    }

    /**
     *
     * @return
     */
    public void isEmptyEdit() {
        Editable text = etPassf.getText();
        Editable text1 = etAcc.getText();
        if(!TextUtils.isEmpty(text)){
            fontCount ++;
        }
        if(!TextUtils.isEmpty(text1)){
            fontCount ++;
        }
    }
}
下面的一个是粘贴的是自己定义的一个类用于继承监听接口.方便用户以后使用方法的时候不用都继承过来

public class BaseTextWatcher implements TextWatcher {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
}

下面的类是一个关于手机和.仅仅需要字母和数字的正则表达式的工具类

public class RegularUtil {
    /**
     * 匹配手机
     * @param mobiles
     * @return
     */
    public static boolean isMobileNO(String mobiles) {
        String telRegex = "13\\d{9}|14[57]\\d{8}|15[012356789]\\d{8}|18[01256789]\\d{8}|17[0678]\\d{8}";
        if (TextUtils.isEmpty(mobiles)) return false;
        else
            return mobiles.matches(telRegex);
    }

    /**
     * 匹配输入的账户或密码是否满足添加
     * @param num 输入的信息
     * @param start 最少的个数
     * @param end 最大的个数
     * @return 判断是否满足添加
     */
    public  static boolean MatchesNum(String num,int start , int end){
        String numRegex = "\\w{5,20}";
        if(TextUtils.isEmpty(num)){
            return false;
        }
        return num.matches(numRegex);
    }
}



xml:文件.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.jzbwlkj.sp.MainActivity">

    <EditText
        android:id="@+id/et_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="输入内容" />
    <Button
        android:id="@+id/bt_main"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击按钮"/>
    <Button
        android:id="@+id/bt_get"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="获取"/>
</LinearLayout>











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值