Android Chronometer:时间格式问题

时间:2014-06-05 16:39:37

标签: java android simpledateformat chronometer

为什么我的天文台在我告诉它之后不会停止?

我发现它似乎与我测试过的平板电脑是隔离的(7英寸Galaxy Tab)。我不知道为什么它可以在我的手机上工作但不能在平板电脑上工作。 Chronometer在两种布局中设置相同(因为我对不同的屏幕尺寸使用不同的布局)。

以下是在类中处理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();
}

以下是在普通尺寸屏幕中设置的方式:

<Chronometer
    android:id="@+id/calling_crono"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:textColor="#000099" 
    android:textStyle="bold"
    android:textSize="20sp"/>

这是在大尺寸屏幕上:

 <Chronometer
    android:id="@+id/calling_crono"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="50sp"
    android:textColor="#000099"
    android:textStyle="bold" />

基本问题是,在手机上它正常工作,即20秒后继续运行,但在平板电脑上它不会停止并继续前进。是否有一些原因可以解释为什么这可以在我的手机(Xperia)上运行,但不能在平板电脑上运行。我唯一能想到的是他们使用不同的xml布局文件。

1 个答案:

答案 0 :(得分:1)

我相信您遇到的内容与“不同的布局xml文件”无关。它似乎是一个Android 错误,可能就是这个:Chronometer in Android 4.2

要检查我在普通屏幕尺寸手机上 Android 4.2.2 )和三星Galaxy Tab 7 ( Android 4.0.3 )。我得到以下字符串格式的返回值chrono.getText().toString()

  1. Android 4.0.3: "mm:ss"
  2. Android 4.2.2: "m:ss"
  3. 对应于报告的 bug

    假设您的Galaxy Tab 7 Android 4.2 解释为什么计时器不会停止并继续前进:条件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
    }