如何使用 editText 以 (mm:ss) 格式设置可变持续时间计时器?
How can I set a variable duration timer in (mm:ss) format using editText?
在 java 方面我完全是个新手。
我以研究学习和人类行为为生,需要一款带有两种计时器的应用程序。
这些计时器将存在于片段中。
第一种计时器将接受用户输入(间隔 - 分钟、秒或两者)并倒计时。归零后,该计时器将重置为原始输入值并重新启动。用户还可以选择点击 "reset" 按钮以从原始输入值开始计时(例如,如果输入的数字 = 5、5-4-3-2-1-0-5-4-3 -reset-5-4-3-2-1-0)
第二种计时器将再次接受用户输入。当计时器启动时,它将从两个输入值之间的数字开始倒计时。用户可以选择点击 "reset" 按钮以从 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。)
如有任何帮助,我们将不胜感激!
除了花费最后 6 小时观看 YouTube 视频、阅读论坛和浏览 Android 开发者网站外,我还尝试调整整数分钟的除数 = (int) (TimeLeftInMillis)和 int seconds "",我尝试更改 long millisInput = Long.parseLong(input) * value 中的乘积值。我也试过抱怨和咒骂。
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);
一般来说,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 事件。
希望这对您有所帮助:)
在 java 方面我完全是个新手。 我以研究学习和人类行为为生,需要一款带有两种计时器的应用程序。
这些计时器将存在于片段中。
第一种计时器将接受用户输入(间隔 - 分钟、秒或两者)并倒计时。归零后,该计时器将重置为原始输入值并重新启动。用户还可以选择点击 "reset" 按钮以从原始输入值开始计时(例如,如果输入的数字 = 5、5-4-3-2-1-0-5-4-3 -reset-5-4-3-2-1-0)
第二种计时器将再次接受用户输入。当计时器启动时,它将从两个输入值之间的数字开始倒计时。用户可以选择点击 "reset" 按钮以从 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。)
如有任何帮助,我们将不胜感激!
除了花费最后 6 小时观看 YouTube 视频、阅读论坛和浏览 Android 开发者网站外,我还尝试调整整数分钟的除数 = (int) (TimeLeftInMillis)和 int seconds "",我尝试更改 long millisInput = Long.parseLong(input) * value 中的乘积值。我也试过抱怨和咒骂。
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);
一般来说,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 事件。
希望这对您有所帮助:)