Android下edittext限制文本指定位置数字不能超出多少

开发中需要做一个时间输入,但是时间不能超出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,如果需要加冒号可以自行在代码中添加即可,此方法使用于数字限制,数字约定等的实现,如果有什么实际需求还是根据实际需求做修改

猜你喜欢

转载自blog.csdn.net/qq_31914027/article/details/78901381