Android Chronometer:时间格式问题
为什么我的天文台在我告诉之后不会停下来?
我发现它似乎与我测试过的平板电脑是隔离的(7英寸Galaxy Tab
)。 我不知道为什么它可以在我的手机上工作但不能在平板电脑上工作。 Chronometer
在两种布局中的设置相同(因为我对不同的屏幕尺寸使用不同的布局)。
以下是class上处理Chronometer
方法:
this.chrono = (Chronometer) findViewById(R.id.calling_crono); chrono.setOnChronometerTickListener(new OnChronometerTickListener() { public void onChronometerTick(Chronometer chronometer) { String currentTime= chrono.getText().toString(); if(currentTime.equals("00:20")) { chrono.stop(); Intent intent = new Intent(QuizActivity.this, ResultActivity.class); Bundle b = new Bundle(); int end = -5; b.putInt("score", score); b.putInt("end", end); intent.putExtras(b); startActivity(intent); finish(); } } }); public void startCrono() { chrono.setBase(SystemClock.elapsedRealtime()); chrono.start(); }
以下是在普通尺寸屏幕中设置的方式:
这是在大尺寸屏幕上:
基本的问题是,在手机上它可以正常工作,即在20秒后继续运行,但在平板电脑上它不会停止并继续前进。 是否有一些原因可以解决这个原因在我的手机( Xperia
)上,但不适用于平板电脑。 我唯一能想到的是他们使用不同的xml
布局文件。
我相信你遇到的与“不同的布局xml文件”无关。 这似乎是一个Android bug ,可能就是这个: Android 4.2中的天文台 。
要检查我是否在普通屏幕尺寸的手机 ( Android 4.2.2
)和三星Galaxy Tab 7 ( Android 4.0.3
)上进行了几项测试(只有一种布局)。 我得到chrono.getText().toString()
的返回值的以下字符串格式 chrono.getText().toString()
-
Android 4.0.3:
"mm:ss"
-
Android 4.2.2:
"m:ss"
这对应于报告的错误 。
假设你的Galaxy Tab 7有Android 4.2
解释为什么Chronometer不会停止并继续前进 :条件currentTime.equals("00:20")
是false
因为你比较了两个不同格式的字符串 , "m:ss"
用"mm:ss"
。
如果我的假设是错误的并且它不考虑Android
版本,那么有一个解决方案来处理它。
解决方案:我建议以某种方式格式化currentTime
,例如"mm:ss"
,然后将格式化的时间与"00:20"
进行比较。 以下代码段使用SimpleDateFormat :
chrono.setOnChronometerTickListener(new OnChronometerTickListener() { public void onChronometerTick(Chronometer chronometer) { String currentTime= chrono.getText().toString(); Date date = null; try { date = new SimpleDateFormat("mm:ss").parse(currentTime); } catch (ParseException e) { e.printStackTrace(); } String newTime = new SimpleDateFormat("mm:ss").format(date); ...
现在使用newTime
进行比较:
if(newTime.equals("00:20")) { // your code }