Untitled
unknown
kotlin
a month ago
5.5 kB
3
Indexable
Never
// Your package import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.DatePicker import androidx.compose.material3.DatePickerDefaults import androidx.compose.material3.DatePickerDialog import androidx.compose.material3.DisplayMode import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.rememberDatePickerState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import java.text.SimpleDateFormat import java.util.Calendar import java.util.Locale @OptIn(ExperimentalMaterial3Api::class) class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { // Initial state setup for the DatePickerDialog. Specifies to show the picker initially val datePickerState = rememberDatePickerState(initialDisplayMode = DisplayMode.Picker) // State to hold the selected date as a String val selectedDateLabel = remember { mutableStateOf("") } // State to control the visibility of the DatePickerDialog val openDialog = remember { mutableStateOf(false) } // Define the main color for the calendar picker val calendarPickerMainColor = Color(0xFF722276) // Layout for displaying the button and the selected date Column( modifier = Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center ) { // Button to open the DatePickerDialog Button( onClick = { openDialog.value = !openDialog.value } ) { Text("Open Date Picker") } // Displays the selected date Text("Selected Date: ${selectedDateLabel.value}") } // Conditional display of the DatePickerDialog based on the openDialog state if (openDialog.value) { // DatePickerDialog component with custom colors and button behaviors DatePickerDialog( colors = DatePickerDefaults.colors( containerColor = Color(0xFFF5F0FF), ), onDismissRequest = { // Action when the dialog is dismissed without selecting a date openDialog.value = false }, confirmButton = { // Confirm button with custom action and styling TextButton( onClick = { // Action to set the selected date and close the dialog openDialog.value = false selectedDateLabel.value = datePickerState.selectedDateMillis?.convertMillisToDate() ?: "" } ) { Text("OK", color = calendarPickerMainColor) } }, dismissButton = { // Dismiss button to close the dialog without selecting a date TextButton( onClick = { openDialog.value = false } ) { Text("CANCEL", color = calendarPickerMainColor) } } ) { // The actual DatePicker component within the dialog DatePicker( state = datePickerState, colors = DatePickerDefaults.colors( selectedDayContainerColor = calendarPickerMainColor, selectedDayContentColor = Color.White, selectedYearContainerColor = calendarPickerMainColor, selectedYearContentColor = Color.White, todayContentColor = calendarPickerMainColor, todayDateBorderColor = calendarPickerMainColor ) ) } } } } } fun Long.convertMillisToDate(): String { // Create a calendar instance in the default time zone val calendar = Calendar.getInstance().apply { timeInMillis = this@convertMillisToDate // Adjust for the time zone offset to get the correct local date val zoneOffset = get(Calendar.ZONE_OFFSET) val dstOffset = get(Calendar.DST_OFFSET) add(Calendar.MILLISECOND, -(zoneOffset + dstOffset)) } // Format the calendar time in the specified format val sdf = SimpleDateFormat("MMM dd, yyyy", Locale.US) return sdf.format(calendar.time) }
Leave a Comment