开发中需要做一个时间输入,但是时间不能超出23:59分
逻辑分析:
第一位和第二位是小时。第一位只能为0、1、2
而且小时必须小于24
第三位和第四位是分钟 不能超出59
只需要现在第三位不大于5即可实现控制
et_visit_time.addTextChangedListener(new TextWatcher() {//设置时间输入限制,对时间做一个限制
private int beforlen = 0;
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if (s.equals("")) {
return;
}
LogUtil.log(tag, "afterTextChanged" + s);
if (s.length() > beforlen) {// 根据位数判断增加的数字
// LogUtil.log(tag, "增加");
if (s.length() == 1) {// 第一位
if ((Integer.valueOf(s.toString()) > 2)) {
et_visit_time.setText("");
} else {
beforlen = s.length();
}
} else if (s.length() == 2) {
if ((Integer.valueOf(s.toString()) > 23)) {
et_visit_time.setText(s.subSequence(0, 1));
} else {
beforlen = s.length();
}
} else if (s.length() == 3) {
String min = s.subSequence(2, 3).toString();
LogUtil.log(tag, "fe" + min);
if ((Integer.valueOf(min) > 5)) {
et_visit_time.setText(s.subSequence(0, 2));
} else {
beforlen = s.length();
}
} else if (s.length() == 4) {
beforlen = s.length();
}
} else {
// LogUtil.log(tag, "删减");
beforlen = s.length();
et_visit_time.setSelection(beforlen);
}
}
});
et_visit_time.setText调用此方法后,光标会自动定位到最前面,需要下面的处理
et_visit_time.setSelection(beforlen);此方法可以让光标移到最后的输入位置
下面是XML片段
<EditText
android:id="@+id/ed_visit_time_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:gravity="bottom"
android:imeOptions="actionNext"
android:inputType="number"
android:maxLength="4"
android:singleLine="true"
android:textSize="18sp" />
我使用的方法显示的是1230代表了12:30,如果需要加冒号可以自行在代码中添加即可,此方法使用于数字限制,数字约定等的实现,如果有什么实际需求还是根据实际需求做修改