为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

子衿沉夜 2023-06-14 10:34:09
说到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);
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

一般来说,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 事件。


希望这可以帮助你 :)


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号