重新打印 Chronometer 值给出 Integer 值而不是 String

re-Printing Chronometer value gives Integer value instead of String

我试图提取一个字符串值,该值等于计时器停止的时刻,如“01:21”,但经过的时间给出一个整数值,如“11322”。

val chronometer = findViewById<Chronometer>(R.id.chronometer)
chronometer.base = SystemClock.elapsedRealtime()
chronometer.format = "%s"
chronometer.start()
button.setOnClickListener {
    val elapsedTime = SystemClock.elapsedRealtime() - chronometer.base
    header.text = elapsedtime.toString()
    Toast.makeText(this,"$elapsedTime",Toast.LENGTH_SHORT).show()
}

准确地说,您得到的是长值而不是整数,因为 SystemClock.elapsedRealtime()chronometer.base return 都是长值。

要让你失望了,目前还没有办法直接得到计时表显示的时间,当然你可以把得到的毫秒换算成分秒,这样就可以再显示了。


这是我的示例,它是如何工作的:

private fun calculateTime(chronometerMillis : Long) {
    val minutes = TimeUnit.MILLISECONDS.toMinutes(chronometerMillis)
    val seconds = TimeUnit.MILLISECONDS.toSeconds(chronometerMillis) - (minutes * 60)

    println("Recreated time: $minutes:$seconds")
}

如果您现在使用值 81000 调用此方法,即 1 分 21 秒(就像您的计时器一样),它会打印 Recreated time: 1:21.


要在您的项目中使用它,只需 return 一个字符串:

private fun calculateTime(chronometerMillis : Long) : String {
    val minutes = TimeUnit.MILLISECONDS.toMinutes(chronometerMillis)
    val seconds = TimeUnit.MILLISECONDS.toSeconds(chronometerMillis) - (minutes * 60)

    return "$minutes:$seconds"
}
private  fun formattedChronometer(chronometer: Chronometer): String {
    val elapsedTime = SystemClock.elapsedRealtime() - chronometer.base
    val time = elapsedTime / 1000
    val minutes = time / 60
    val seconds = time % 60
    return String.format("%02d:%02d",minutes,seconds)
}

在查看文档后设法使用此函数解决了它