使用 ChatGPT 幫忙產生的範例程式,它真是太方便了!
以下是一個簡單的使用 Jetpack Compose 實現的鬧鐘應用程式範例,它允許用戶設置鬧鐘時間,當時間到達時發出聲音提示。
import android.media.MediaPlayer
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import kotlinx.coroutines.launch
import java.text.SimpleDateFormat
import java.util.*
@Composable
fun AlarmClock() {
var time by remember { mutableStateOf("") }
var isPlaying by remember { mutableStateOf(false) }
val mediaPlayer = remember { MediaPlayer.create(LocalContext.current, R.raw.alarm_sound) }
val scope = rememberCoroutineScope()
fun startAlarm() {
isPlaying = true
mediaPlayer.start()
}
fun stopAlarm() {
isPlaying = false
mediaPlayer.pause()
mediaPlayer.seekTo(0)
}
LaunchedEffect(isPlaying) {
if (isPlaying) {
scope.launch {
delay(30000L) // 30 seconds
stopAlarm()
}
}
}
Column(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = "Alarm Clock",
fontWeight = FontWeight.Bold,
fontSize = 28.sp,
modifier = Modifier.padding(bottom = 16.dp)
)
TextField(
value = time,
onValueChange = { time = it },
label = { Text("Set alarm time") },
placeholder = { Text("HH:mm") },
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
imeAction = ImeAction.Done,
keyboardType = KeyboardType.Number
),
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(16.dp))
Row(
horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth()
) {
IconButton(
onClick = { startAlarm() },
modifier = Modifier.padding(16.dp)
) {
Icon(
imageVector = Icons.Filled.PlayArrow,
contentDescription = "Start alarm",
tint = if (isPlaying) Color.Red else Color.Black,
modifier = Modifier.size(48.dp)
)
}
IconButton(
onClick = { stopAlarm() },
modifier = Modifier.padding(16.dp)
) {
Icon(
imageVector = Icons.Filled.Stop,
contentDescription = "Stop alarm",
tint = if (!isPlaying) Color.Gray else Color.Black,
modifier = Modifier.size(48.dp)
)
}
}
Spacer(modifier = Modifier.height(16.dp))
val dateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
val currentTime = dateFormat.format(Date())
Text(
text = "Current time: $currentTime",
fontSize = 18.sp,
color = Color.Gray
)
}
}
在此示例中,我們使用 MediaPlayer
來播放聲音。當用戶按下“啟動鬧鐘”按鈕時,我們使用 MediaPlayer
開始播放聲音並將 isPlaying
設置為 true
。同時,我們也啟動一個協程,延遲 30 秒後停止鬧鐘聲音。在 stopAlarm()
函數中,我們將 isPlaying
設置為 false
,暫停播放並將播放進度重設為 0。
TextField
用於讓用戶設置鬧鐘時間。用戶可以輸入格式為“HH:mm”的時間。我們使用 onValueChange
屬性監聽輸入的值並將其存儲在 time
變量中。
我們使用 IconButton
來實現“啟動鬧鐘”和“停止鬧鐘”按鈕。在按鈕上顯示相應的圖標。我們使用 tint
屬性來改變圖標的顏色以反映按鈕的狀態。當鬧鐘正在播放時,“啟動鬧鐘”按鈕將變為紅色,而“停止鬧鐘”按鈕將變為灰色。
最後,我們使用 SimpleDateFormat
格式化當前時間,並在界面上顯示出來。
總體而言,這個範例展示了如何使用 Jetpack Compose 構建一個簡單的應用程序。它展示了如何使用狀態、按鈕和文本字段等基本 UI 元素,以及如何在 Compose 中使用協程。
發佈留言