发现使用网上博客上的正则表达式写的不太简便,于是自己想了一种自己的方案,直接看代码吧。
- 首先在xml布局文件中对EditText进行属性设置
<EditText
android:id="@+id/et_end_time_repeat_times"
android:text="1"
android:inputType="number"
android:maxLength="3"
android:textAlignment="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="40dp"/>
输入类型设置为inputType=”number”,也就是数字类型。
最大长度为maxLength=”3”
- 在java代码里重写EditText的内容改变的监听器
//结束时间中的重复次数的编辑框的内容改变的监听器
mEtEndTimeRepeatTimes.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
/*if((mEtEndTimeRepeatTimes.getText()==null) ||
("".equals(mEtEndTimeRepeatTimes.getText().toString()))){
mEtEndTimeRepeatTimes.setText("1");
}*/
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2){
//这里需要注意,必须先判断mEtEndTimeRepeatTimes.getText()是否为空才能使用Integer.parseInt,否则会报异常。
if((mEtEndTimeRepeatTimes.getText()!=null) &&
!("".equals(mEtEndTimeRepeatTimes.getText().toString()))){
if (Integer.parseInt(String.valueOf(mEtEndTimeRepeatTimes.getText())) == 0){
mEtEndTimeRepeatTimes.setText("1");
}
if(Integer.parseInt(String.valueOf(mEtEndTimeRepeatTimes.getText())) > 730){
mEtEndTimeRepeatTimes.setText("730");
}
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
必须先判断mEtEndTimeRepeatTimes.getText()是否为空才能使用Integer.parseInt,否则会报异常。异常原因可以参考上一篇博文:java.lang.NumberFormatException: For input string: “”报错
- 需要对获得焦点和失去焦点的时间进行监听
//结束时间中的重复次数的编辑框的焦点改变的监听器
mEtEndTimeRepeatTimes.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) { // 得到焦点
if((mEtEndTimeRepeatTimes.getText()==null) ||
("".equals(mEtEndTimeRepeatTimes.getText().toString()))){
mEtEndTimeRepeatTimes.setText("1"); //默认设置为1
}
} else { // 失去焦点
if((mEtEndTimeRepeatTimes.getText()==null) ||
("".equals(mEtEndTimeRepeatTimes.getText().toString()))){
mEtEndTimeRepeatTimes.setText("1");//默认设置为1
}
}
}
});
实现效果: