@@ -18,6 +18,7 @@ package com.example.compose.snippets.components
18
18
19
19
import androidx.compose.foundation.background
20
20
import androidx.compose.foundation.layout.Arrangement
21
+ import androidx.compose.foundation.layout.Box
21
22
import androidx.compose.foundation.layout.Column
22
23
import androidx.compose.foundation.layout.IntrinsicSize
23
24
import androidx.compose.foundation.layout.Row
@@ -60,79 +61,180 @@ import java.util.Locale
60
61
@OptIn(ExperimentalMaterial3Api ::class )
61
62
@Composable
62
63
fun TimePickerExamples () {
64
+ var showMenu by remember { mutableStateOf(true ) }
65
+
63
66
var showDialExample by remember { mutableStateOf(false ) }
64
67
var showInputExample by remember { mutableStateOf(false ) }
68
+ var showDialWithDialogExample by remember { mutableStateOf(false ) }
65
69
var showAdvancedExample by remember { mutableStateOf(false ) }
66
70
67
71
var selectedTime: TimePickerState ? by remember { mutableStateOf(null ) }
68
72
69
73
val formatter = remember { SimpleDateFormat (" hh:mm a" , Locale .getDefault()) }
70
74
71
- Column (
72
- modifier = Modifier
73
- .fillMaxSize()
74
- .padding(32 .dp),
75
- horizontalAlignment = Alignment .CenterHorizontally ,
76
- verticalArrangement = Arrangement .spacedBy(24 .dp),
75
+ Box (
76
+ Modifier .fillMaxSize(),
77
+ contentAlignment = Alignment .Center
77
78
) {
78
- Button (onClick = {
79
- showDialExample = true
80
- }) {
81
- Text (" Dial time picker" )
79
+ if (showMenu) {
80
+ Column (
81
+ modifier = Modifier
82
+ .fillMaxSize()
83
+ .padding(32 .dp),
84
+ horizontalAlignment = Alignment .CenterHorizontally ,
85
+ verticalArrangement = Arrangement .spacedBy(24 .dp),
86
+ ) {
87
+ Button (onClick = {
88
+ showDialExample = true
89
+ showMenu = false
90
+ }) {
91
+ Text (" Dial time picker" )
92
+ }
93
+ Button (onClick = {
94
+ showInputExample = true
95
+ showMenu = false
96
+ }) {
97
+ Text (" Input time picker" )
98
+ }
99
+ Button (onClick = {
100
+ showDialWithDialogExample = true
101
+ showMenu = false
102
+ }) {
103
+ Text (" Time picker with dialog" )
104
+ }
105
+ Button (onClick = {
106
+ showAdvancedExample = true
107
+ showMenu = false
108
+ }) {
109
+ Text (" Time picker with custom dialog" )
110
+ }
111
+ if (selectedTime != null ) {
112
+ val cal = Calendar .getInstance()
113
+ cal.set(Calendar .HOUR_OF_DAY , selectedTime!! .hour)
114
+ cal.set(Calendar .MINUTE , selectedTime!! .minute)
115
+ cal.isLenient = false
116
+ Text (" Selected time = ${formatter.format(cal.time)} " )
117
+ } else {
118
+ Text (" No time selected." )
119
+ }
120
+ }
82
121
}
83
- Button (onClick = {
84
- showInputExample = true
85
- }) {
86
- Text (" Input time picker" )
122
+
123
+ when {
124
+ showDialExample -> DialUseStateExample (
125
+ onDismiss = {
126
+ showDialExample = false
127
+ showMenu = true
128
+ },
129
+ onConfirm = {
130
+ time ->
131
+ selectedTime = time
132
+ showDialExample = false
133
+ showMenu = true
134
+ },
135
+ )
136
+ showInputExample -> InputUseStateExample (
137
+ onDismiss = {
138
+ showInputExample = false
139
+ showMenu = true
140
+ },
141
+ onConfirm = {
142
+ time ->
143
+ selectedTime = time
144
+ showInputExample = false
145
+ showMenu = true
146
+ },
147
+ )
148
+ showDialWithDialogExample -> DialWithDialogExample (
149
+ onDismiss = {
150
+ showDialWithDialogExample = false
151
+ showMenu = true
152
+ },
153
+ onConfirm = {
154
+ time ->
155
+ selectedTime = time
156
+ showDialWithDialogExample = false
157
+ showMenu = true
158
+ },
159
+ )
160
+ showAdvancedExample -> AdvancedTimePickerExample (
161
+ onDismiss = {
162
+ showAdvancedExample = false
163
+ showMenu = true
164
+ },
165
+ onConfirm = {
166
+ time ->
167
+ selectedTime = time
168
+ showAdvancedExample = false
169
+ showMenu = true
170
+ },
171
+ )
87
172
}
88
- Button (onClick = {
89
- showAdvancedExample = true
90
- }) {
91
- Text (" Time picker with custom dialog" )
173
+ }
174
+ }
175
+
176
+ @OptIn(ExperimentalMaterial3Api ::class )
177
+ // [START android_compose_components_dial]
178
+ @Composable
179
+ fun DialExample (
180
+ onConfirm : () -> Unit ,
181
+ onDismiss : () -> Unit ,
182
+ ) {
183
+ val currentTime = Calendar .getInstance()
184
+
185
+ val timePickerState = rememberTimePickerState(
186
+ initialHour = currentTime.get(Calendar .HOUR_OF_DAY ),
187
+ initialMinute = currentTime.get(Calendar .MINUTE ),
188
+ is24Hour = true ,
189
+ )
190
+
191
+ Column {
192
+ TimePicker (
193
+ state = timePickerState,
194
+ )
195
+ Button (onClick = onDismiss) {
196
+ Text (" Dismiss picker" )
92
197
}
93
- if (selectedTime != null ) {
94
- val cal = Calendar .getInstance()
95
- cal.set(Calendar .HOUR_OF_DAY , selectedTime!! .hour)
96
- cal.set(Calendar .MINUTE , selectedTime!! .minute)
97
- cal.isLenient = false
98
- Text (" Selected time = ${formatter.format(cal.time)} " )
99
- } else {
100
- Text (" No time selected." )
198
+ Button (onClick = onConfirm) {
199
+ Text (" Confirm selection" )
101
200
}
102
201
}
202
+ }
203
+ // [END android_compose_components_dial]
103
204
104
- when {
105
- showDialExample -> DialExample (
106
- onDismiss = { showDialExample = false },
107
- onConfirm = {
108
- time ->
109
- selectedTime = time
110
- showDialExample = false
111
- },
112
- )
113
- showInputExample -> InputExample (
114
- onDismiss = { showInputExample = false },
115
- onConfirm = {
116
- time ->
117
- selectedTime = time
118
- showInputExample = false
119
- },
120
- )
121
- showAdvancedExample -> AdvancedTimePickerExample (
122
- onDismiss = { showAdvancedExample = false },
123
- onConfirm = {
124
- time ->
125
- selectedTime = time
126
- showAdvancedExample = false
127
- },
205
+ @OptIn(ExperimentalMaterial3Api ::class )
206
+ // [START android_compose_components_input]
207
+ @Composable
208
+ fun InputExample (
209
+ onConfirm : () -> Unit ,
210
+ onDismiss : () -> Unit ,
211
+ ) {
212
+ val currentTime = Calendar .getInstance()
213
+
214
+ val timePickerState = rememberTimePickerState(
215
+ initialHour = currentTime.get(Calendar .HOUR_OF_DAY ),
216
+ initialMinute = currentTime.get(Calendar .MINUTE ),
217
+ is24Hour = true ,
218
+ )
219
+
220
+ Column {
221
+ TimeInput (
222
+ state = timePickerState,
128
223
)
224
+ Button (onClick = onDismiss) {
225
+ Text (" Dismiss picker" )
226
+ }
227
+ Button (onClick = onConfirm) {
228
+ Text (" Confirm selection" )
229
+ }
129
230
}
130
231
}
232
+ // [END android_compose_components_input]
131
233
132
234
@OptIn(ExperimentalMaterial3Api ::class )
133
- // [START android_compose_components_dial ]
235
+ // [START android_compose_components_dial_usestate ]
134
236
@Composable
135
- fun DialExample (
237
+ fun DialUseStateExample (
136
238
onConfirm : (TimePickerState ) -> Unit ,
137
239
onDismiss : () -> Unit ,
138
240
) {
@@ -144,22 +246,53 @@ fun DialExample(
144
246
is24Hour = true ,
145
247
)
146
248
147
- // For information on how to implement a time picker dialog, see the "Dialogs for time pickers" guide.
148
- TimePickerDialog (
149
- onDismiss = { onDismiss() },
150
- onConfirm = { onConfirm(timePickerState) }
151
- ) {
249
+ Column {
152
250
TimePicker (
153
251
state = timePickerState,
154
252
)
253
+ Button (onClick = onDismiss) {
254
+ Text (" Dismiss picker" )
255
+ }
256
+ Button (onClick = { onConfirm(timePickerState) }) {
257
+ Text (" Confirm selection" )
258
+ }
155
259
}
156
260
}
157
- // [END android_compose_components_dial ]
261
+ // [END android_compose_components_dial_usestate ]
158
262
159
263
@OptIn(ExperimentalMaterial3Api ::class )
160
- // [START android_compose_components_input ]
264
+ // [START android_compose_components_input_usestate ]
161
265
@Composable
162
- fun InputExample (
266
+ fun InputUseStateExample (
267
+ onConfirm : (TimePickerState ) -> Unit ,
268
+ onDismiss : () -> Unit ,
269
+ ) {
270
+ val currentTime = Calendar .getInstance()
271
+
272
+ val timePickerState = rememberTimePickerState(
273
+ initialHour = currentTime.get(Calendar .HOUR_OF_DAY ),
274
+ initialMinute = currentTime.get(Calendar .MINUTE ),
275
+ is24Hour = true ,
276
+ )
277
+
278
+ Column {
279
+ TimeInput (
280
+ state = timePickerState,
281
+ )
282
+ Button (onClick = onDismiss) {
283
+ Text (" Dismiss picker" )
284
+ }
285
+ Button (onClick = { onConfirm(timePickerState) }) {
286
+ Text (" Confirm selection" )
287
+ }
288
+ }
289
+ }
290
+ // [END android_compose_components_input_usestate]
291
+
292
+ @OptIn(ExperimentalMaterial3Api ::class )
293
+ // [START android_compose_components_timepickerdialog]
294
+ @Composable
295
+ fun DialWithDialogExample (
163
296
onConfirm : (TimePickerState ) -> Unit ,
164
297
onDismiss : () -> Unit ,
165
298
) {
@@ -171,17 +304,38 @@ fun InputExample(
171
304
is24Hour = true ,
172
305
)
173
306
174
- // For information on how to implement a time picker dialog, see the "Dialogs for time pickers" guide.
175
307
TimePickerDialog (
176
308
onDismiss = { onDismiss() },
177
309
onConfirm = { onConfirm(timePickerState) }
178
310
) {
179
- TimeInput (
311
+ TimePicker (
180
312
state = timePickerState,
181
313
)
182
314
}
183
315
}
184
- // [END android_compose_components_input]
316
+
317
+ @Composable
318
+ fun TimePickerDialog (
319
+ onDismiss : () -> Unit ,
320
+ onConfirm : () -> Unit ,
321
+ content : @Composable () -> Unit
322
+ ) {
323
+ AlertDialog (
324
+ onDismissRequest = onDismiss,
325
+ dismissButton = {
326
+ TextButton (onClick = { onDismiss() }) {
327
+ Text (" Dismiss" )
328
+ }
329
+ },
330
+ confirmButton = {
331
+ TextButton (onClick = { onConfirm() }) {
332
+ Text (" OK" )
333
+ }
334
+ },
335
+ text = { content() }
336
+ )
337
+ }
338
+ // [END android_compose_components_timepickerdialog]
185
339
186
340
@OptIn(ExperimentalMaterial3Api ::class )
187
341
// [START android_compose_components_advanced]
@@ -209,7 +363,6 @@ fun AdvancedTimePickerExample(
209
363
Icons .Filled .AccessTime
210
364
}
211
365
212
- // For information on how to implement a time picker dialog, see the "Dialogs for time pickers" guide.
213
366
AdvancedTimePickerDialog (
214
367
onDismiss = { onDismiss() },
215
368
onConfirm = { onConfirm(timePickerState) },
@@ -233,33 +386,7 @@ fun AdvancedTimePickerExample(
233
386
}
234
387
}
235
388
}
236
- // [END android_compose_components_advanced]
237
-
238
- // [START android_compose_components_timepickerdialog]
239
- @Composable
240
- fun TimePickerDialog (
241
- onDismiss : () -> Unit ,
242
- onConfirm : () -> Unit ,
243
- content : @Composable () -> Unit
244
- ) {
245
- AlertDialog (
246
- onDismissRequest = onDismiss,
247
- dismissButton = {
248
- TextButton (onClick = { onDismiss() }) {
249
- Text (" Dismiss" )
250
- }
251
- },
252
- confirmButton = {
253
- TextButton (onClick = { onConfirm() }) {
254
- Text (" OK" )
255
- }
256
- },
257
- text = { content() }
258
- )
259
- }
260
- // [END android_compose_components_timepickerdialog]
261
389
262
- // [START android_compose_components_advanceddialog]
263
390
@Composable
264
391
fun AdvancedTimePickerDialog (
265
392
title : String = "Select Time ",
@@ -310,4 +437,4 @@ fun AdvancedTimePickerDialog(
310
437
}
311
438
}
312
439
}
313
- // [END android_compose_components_advanceddialog ]
440
+ // [END android_compose_components_advanced ]
0 commit comments