猿问

如何使用 editText 以 (mm:ss) 格式设置可变持续时间计时器?

说到java,我是一个完全的新手。我以研究学习和人类行为为生,需要一款带有两种计时器的应用程序。


这些计时器将存在于片段中。


第一种类型的计时器将接受用户输入(间隔 - 分钟、秒或两者)并倒计时。归零后,该计时器将重置为原始输入值并重新启动。用户还可以选择点击“重置”按钮以从原始输入值开始计时(例如,如果输入的数字 = 5、5-4-3-2-1-0-5-4-3-reset -5-4-3-2-1-0)


第二种类型的计时器将再次接受用户输入。当计时器启动时,它将从两个输入值之间的数字开始倒计时。用户可以选择点击“重置”按钮以从 0 和输入的数字之间的新数字开始计时(例如,如果输入的数字范围 = 3 和 7,则 4-3-2-1-0-6- 5-4-重置-1-0-7-6-重置-2-1-0。)


现在我有一个计时器,从固定的时间间隔以分钟为单位倒计时,但用户只能输入分钟,而不是秒(例如,如果按下“1”,则设置为 01:00,如果按下“130”,则为 01: 00 仍然设置。我希望用户可以选择设置 01:30 或 00:30。)


任何帮助将不胜感激!


mButtonSet.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(android.view.View view) {

                String input = mEditTextInput.getText().toString();

                if (input.length() == 0) {

                    Toast.makeText(getActivity(), "Fill it in, loser", Toast.LENGTH_SHORT).show();

                    return;

                }


                long millisInput = Long.parseLong(input) * 60000;

                if (millisInput == 0) {

                    Toast.makeText(getActivity(), "Please enter a positive number", Toast.LENGTH_SHORT).show();

                    return;

                }


private void startTimer() {

        mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 100) {

            @Override

            public void onTick(long millisUntilFinished) {

                mTimeLeftInMillis = millisUntilFinished;

                updateCountDownText();

            }


private void updateCountDownText() {

        int minutes = (int) (mTimeLeftInMillis / 1000)/60;

        int seconds = (int) (mTimeLeftInMillis / 1000)% 60;


        String timeLeftFormatted = String.format(Locale.getDefault(),


        timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds));

        mTextViewCountdown.setText(timeLeftFormatted);


子衿沉夜
浏览 181回答 1
1回答

HUX布斯

一般来说,Edittexts 不能接受多个输入,所以我们需要一个解决方法。方案一:选择约束用户以mm:ss格式输入,解析如下: String input[] = mEditTextInput.getText().toString().split(":");//input[0] is minutes and input[1] is seconds方案二:使用两个Edittexts,一个挨着一个,中间放一个Textview保存字符串“:”,得到输入如下: String input1 = mEditTextInput.getText().toString(); String input2 = mEditTextInput2.getText().toString();选项 3:使用简单的 Textview,并检测用户的按键以填写值。您还需要变量来检测到目前为止有效按下的次数(输入数字时增加,按 x键时减少)。比如说,Textview 中的初始值是 00:00,当检测到按键“1”时,你可以使用下面的代码来显示它:String str=getKey();String str2=mTextView.getText().toString();if(numKey==0)//numkey is the number of valid presses{    String toSet="0"+str+":00";    mTextView.setText(toSet);}else if(numKey==1){    String toSet=str+str2.substring(1);    mTextView.setText(toSet);}//and so on...getKey()函数可以实现如下:@Override public boolean onKeyDown(int keyCode, KeyEvent event) {    switch (keyCode) {        case KeyEvent.KEYCODE_A:        {            //your Action code            return true;        }    }    return super.onKeyDown(keyCode, event);}实际上,您可以删除该行String str=getKey();代替操作,您可以简单地调用函数(比如 formatTextView)并将键作为参数传递给它,它将负责设置 textView。最后,使用mTextView.getText().toString(); 根据需要取回您的值;注意:如果您的片段有任何其他 Edittext,选项 3 将不起作用,因为这将消耗 onKeyPressed 事件。希望这可以帮助你 :)
随时随地看视频慕课网APP

相关分类

Java
我要回答