为什么我的天文台在我告诉它之后不会停止?
我发现它似乎与我测试过的平板电脑是隔离的(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
布局文件。
答案 0 :(得分:1)
我相信您遇到的内容与“不同的布局xml文件”无关。它似乎是一个Android 错误,可能就是这个:Chronometer in Android 4.2。
要检查我在普通屏幕尺寸手机上( Android 4.2.2
)和三星Galaxy Tab 7 ( Android 4.0.3
)。我得到以下字符串格式的返回值chrono.getText().toString()
Android 4.0.3:
"mm:ss"
Android 4.2.2:
"m:ss"
对应于报告的 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
}