在开发中有的需要对编辑框进行监听如果编辑框中没有值,登录按钮就是无法点击并且颜色为灰色,当编辑框中的值满足添加的时候,按钮可以点击同时颜色发生改变,
由于自己是个菜鸟,.代码中也有注释.也比较简单.有什么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 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>