如何控制EditText?

How to control EditText?

我想控制只接受 int 值的 EditText。用户输入数字然后我将添加字符串(简单部分)。但我想在用户输入数字时动态更改它。我怎样才能做到这一点?

我可以做到这些:
用户写入 61,EditText 输出为:61 min.
用户写入 1314,则 EditText 输出为:13 分 14 秒。

这是问题所在:
如果用户写入 7699,预期的 EditText 输出将是:76 分 59 秒。

我想我需要一个类似 ArrayAdaptergetView() 方法的控制器。如果用户写 1361 那么我不得不对 phone 说不要打印“13 分 61 秒”,只在 EditText 中打印“13 分 59 秒”。但我不知道如何。

我试过的解决方法:

我们将不胜感激。

DateUtils中有这个功能你可以使用,你只需要给它一个Long

/**
     * Formats an elapsed time in the form "MM:SS" or "H:MM:SS"
     * for display on the call-in-progress screen.
     * @param elapsedSeconds the elapsed time in seconds.
     */
    public static String formatElapsedTime(long elapsedSeconds) {
        return formatElapsedTime(null, elapsedSeconds);
    }

使用它真的很简单,DateUtils.formatElapsedTime(time) 并且它会以 MM:SS

格式的字符串打印您的时间

如果只允许数值,您可以在 EditText XML 文件中使用 android:inputType="number"

跟踪写入EditText的值,可以使用addTextChangedListener方法监听EditText的变化,TextWatcher接口

 Timer timer = new Timer();
    final long DELAY = 2000; // in ms
    field1 = (EditText)findViewById(R.id.field1);

    field1.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(final Editable s) {
            // Do whatever you want with the updated value
            timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    // TODO: do what you need here
                    // you will probably need to use
                    // runOnUiThread(Runnable action) for some specific
                    // actions


                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            String minsString = "";
                            String secsString = "";
                            switch (s.length()) {
                                case 1:
                                    if (Integer.parseInt(String.valueOf(s)) == 0 || Integer.parseInt(String.valueOf(s)) == 1) {
                                        field1.setText(s + " min");
                                    } else {
                                        field1.setText(s + " mins");
                                    }
                                    break;
                                case 2:
                                    field1.setText(s + " mins");
                                    break;
                                case 3:
                                    minsString = s.toString().substring(0, 2);
                                    secsString = s.toString().substring(2);
                                    if (Integer.parseInt(secsString) > 59) {
                                        secsString = "59";
                                    }
                                    field1.setText(minsString + " mins " + secsString + " secs");
                                    break;
                                case 4:
                                    minsString = s.toString().substring(0, 2);
                                    secsString = s.toString().substring(2);
                                    if (Integer.parseInt(secsString) > 59) {
                                        secsString = "59";
                                    }
                                    field1.setText(minsString + " mins " + secsString + " secs");
                                    break;
                                default:
                                    break;
                            }
                        }
                    });

                }

            }, DELAY);

        }

        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (timer != null)
                timer.cancel();
        }
    });

参考计时器solution以防止编辑文本的实例更新