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 7Android 4.0.3 )上进行了几项测试(只有一种布局)。 我得到chrono.getText().toString()的返回值的以下字符串格式 chrono.getText().toString()

  1. Android 4.0.3: "mm:ss"
  2. Android 4.2.2: "m:ss"

这对应于报告的错误

假设你的Galaxy Tab 7Android 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 }