Android编程,使用Kotlin,以下是SixthActivity.kt代码 package com.example.activitytest
import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat
class SixthActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() setContentView(R.layout.sixth_layout) ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } } } 以下是layout文件:
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".SixthActivity"> </androidx.constraintlayout.widget.ConstraintLayout>
请在以上代码基础上,增加功能:动态注册和监听系统时间变化,每5秒钟将时间显示在SixthActivity界面的顶部中间位置,时间格式:当前时间:YYYY-MM-DD HH:MI:SS
要在 SixthActivity
中动态注册和监听系统时间变化,并每5秒钟将时间显示在界面的顶部中间位置,你可以按照以下步骤进行:
SixthActivity
中使用 Handler
和 Runnable
来定时更新时间。以下是修改后的代码:
sixth_layout.xml
文件:<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SixthActivity">
<TextView
android:id="@+id/timeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textSize="18sp"
android:textColor="@android:color/black"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintVertical_bias="0.0"/>
</androidx.constraintlayout.widget.ConstraintLayout>
SixthActivity.kt
文件:package com.example.activitytest
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import android.widget.TextView
import java.text.SimpleDateFormat
import java.util.*
class SixthActivity : AppCompatActivity() {
private lateinit var timeTextView: TextView
private val handler = Handler(Looper.getMainLooper())
private val updateTimeRunnable = object : Runnable {
override fun run() {
updateTime()
handler.postDelayed(this, 5000) // 每5秒更新一次
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.sixth_layout)
timeTextView = findViewById(R.id.timeTextView)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// 开始定时更新时间
handler.post(updateTimeRunnable)
}
override fun onDestroy() {
super.onDestroy()
// 停止定时更新
handler.removeCallbacks(updateTimeRunnable)
}
private fun updateTime() {
val currentTime = Calendar.getInstance().time
val dateFormat = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())
val formattedTime = "当前时间:${dateFormat.format(currentTime)}"
timeTextView.text = formattedTime
}
}
ConstraintLayout
中添加了一个 TextView
,用于显示时间,并将其约束在顶部中间位置。SixthActivity.kt
文件:
TextView
变量 timeTextView
,用于引用布局中的 TextView
。Handler
和 Runnable
来定时更新时间。Handler
会每5秒钟执行一次 updateTimeRunnable
,而 updateTimeRunnable
会调用 updateTime
方法来更新 TextView
的内容。onCreate
方法中,开始定时更新时间。onDestroy
方法中,停止定时更新,防止内存泄漏。这样,每5秒钟 TextView
会更新一次,显示当前的系统时间。