Time Text Field
Günün bir saati için bir metin alanı: saat rakamlarla yazılır ya da kutunun sonundaki bir düğmenin açtığı bir saat seçiciden seçilir.
import com.pantrixui.components.date.timetextfield.PantrixTimeTextField
- Yalnız rakam. Alan en çok dört rakam alır; saat tamamlanınca iki nokta kendiliğinden gelir:
143014:30olur. Saatin başı olamayan bir ilk rakam tek haneli bir saattir:93009:30olur. Telefonda rakam klavyesi açılır. - Yapıştırılan saat. Yazılmış bir saat yazıldığı gibi okunur:
14:30,14.30,1430, ya da günün yarısıyla2:30 PM,ÖS 2:30. Dakikadan sonra yazılan saniye bırakılır. - 12 saat.
is24Hour = falseile saatler 01–12 yazılır ve günün yarısı kutuda rakamların yanında bir düğme olarak durur: basmak ya da odaktayken Boşluk onu çevirir, masaüstünde ve web'de A ve P de. Varsayılan 24 saattir, seçicideki gibi. - Değer.
onValueChangealanın saati her değiştiğinde çağrılır: alanın aldığı tam bir saat, ya da alan boş, yarım ya da saat olmayan rakamlar tuttuğunda null. Yarım yazılan saatvaluenull iken ekranda kalır; dışarıdan gelen başka bir saat alana yazılır, saniyesi saat ile dakika yeniden yazılana dek korunur. - Kendi hatası. Alan yanlış yazılanı kutunun altına kendisi yazar: alandan çıkınca tamamlanmamış bir saat, saatte olmayan bir saat (25:00),
minTimeilemaxTimedışında bir saat.minTimemaxTime'dan sonraysa saatler gece yarısını geçer, bir gece vardiyası gibi. Uygulamanınerror'u önce gelir; mesajısupportingText'tir. - Seçici. Düğmeyle, masaüstünde ve web'de Alt+↓ ile, salt okunur alanda kutuya basınca, Enter ya da Boşluk ile açılır;
presentationneyde açılacağını seçer: varsayılan dar pencerede sheet, daha genişte popover; ya da her pencerede popover, sheet ya da dialog. Seçicide her basış saati hemen alana yazar ve seçici açık kalır, böylece önce saat, sonra dakika seçilir; bir değerde Enter, Escape ve dışarı basmak kapatır. Klavyeyle açılınca odak seçili saate, yoksa şimdiki saate geçer.minuteStepyalnız seçicinin dakikalarını belirler; aradaki bir dakika yazılabilir. - Üç biçim.
valueveonValueChangealan biçim;statealan biçim (rememberTimeTextFieldState()):timealanın saatidir,textyarım yazılmış alanı boş alandan ayırır;fieldalan biçim bir formun alanına bağlanır. - Saat türü. Saatler
PantrixTime'dır; bir günle birleştirmek ve başka kütüphanelere çevirmek için docs/guide/date-time/DATE_TIME_GUIDE.md.
Örnekler
Toplantı başlangıcı, çeyrek saatlerle
Bir toplantının başlangıcı, çeyrek saatlerle: seçicinin dakikaları on beşer dakika arayla gelir. Yazarken aradaki bir dakika da alınır. Saat tamamlanınca altta yazılır.
var start by remember { mutableStateOf<PantrixTime?>(null) }
val strings = PantrixTheme.strings
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
PantrixTimeTextField(
value = start,
onValueChange = { start = it },
label = "Toplantı başlangıcı",
minuteStep = QUARTER,
showClearButton = true,
tagKey = "meeting_start"
)
PantrixText(
text = start?.let { "Başlangıç: ${strings.time(it.hour, it.minute, is24Hour = true)}" }
?: "Henüz bir saat yok",
style = PantrixTheme.typography.body
)
}
private const val QUARTER = 15
Çalışma saatleri içinde
Çalışma saatleri içinde bir arama: 09:00'dan önce ya da 18:00'den sonra yazılan bir saat alınmaz ve alan iki ucu söyler. Seçicide aralık dışındaki saatler soluktur ve basılmaz.
var call by remember { mutableStateOf<PantrixTime?>(null) }
PantrixTimeTextField(
value = call,
onValueChange = { call = it },
label = "Arama saati",
supportingText = "Hafta içi 09:00 ile 18:00 arası",
minTime = PantrixTime(OPENS, 0),
maxTime = PantrixTime(CLOSES, 0),
tagKey = "call"
)
private const val OPENS = 9
private const val CLOSES = 18
12 saatlik saat
12 saatlik bir saat: saatler 01–12 yazılır, günün yarısı kutuda rakamların yanında durur. Ona basmak ÖÖ ile ÖS arasında çevirir; seçicide de üçüncü bir sütun olarak gelir.
var alarm by remember { mutableStateOf<PantrixTime?>(PantrixTime(7, 30)) }
val strings = PantrixTheme.strings
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
PantrixTimeTextField(
value = alarm,
onValueChange = { alarm = it },
label = "Alarm",
is24Hour = false,
tagKey = "alarm"
)
PantrixText(
text = alarm?.let { "Alarm: ${strings.time(it.hour, it.minute, is24Hour = false)}" } ?: "Alarm kapalı",
style = PantrixTheme.typography.body
)
}
Seçici bir sheet'te ya da dialog'da
Seçici bir sheet'te açılır: telefonda parmağa yakın, ekranın genişliğinde. presentation = Dialog onu pencerenin ortasında bir dialog'da açar. Sheet her basışta açık kalır; dışarı basmak ya da geri onu kapatır.
var pickup by remember { mutableStateOf<PantrixTime?>(null) }
var presentation by remember { mutableStateOf(DatePickerPresentation.Sheet) }
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
PantrixSegmentButton(
options = listOf(
SegmentOption(DatePickerPresentation.Popover, "Popover", tagKey = "popover"),
SegmentOption(DatePickerPresentation.Sheet, "Sheet", tagKey = "sheet"),
SegmentOption(DatePickerPresentation.Dialog, "Dialog", tagKey = "dialog")
),
selected = presentation,
onSelect = { presentation = it },
fullWidth = false,
tagKey = "presentation"
)
PantrixTimeTextField(
value = pickup,
onValueChange = { pickup = it },
label = "Teslim alma saati",
minuteStep = FIVE_MINUTES,
presentation = presentation,
tagKey = "pickup"
)
}
private const val FIVE_MINUTES = 5
Uygulamanın hatası ve devre dışı
Uygulamanın kendi hatası alanınkinden önce gelir: dolu bir saat error ve supportingText ile söylenir. Altındaki alan devre dışıdır: odak almaz, seçicisi açılmaz.
var slot by remember { mutableStateOf<PantrixTime?>(PantrixTime(BOOKED, 0)) }
val taken = slot == PantrixTime(BOOKED, 0)
PantrixTimeTextField(
value = slot,
onValueChange = { slot = it },
label = "Randevu saati",
supportingText = if (taken) "Bu saat dolu, başka bir saat seçin" else "Yarım saatlik bir randevu",
error = taken,
tagKey = "slot"
)
PantrixTimeTextField(
value = PantrixTime(OPENS, 0),
onValueChange = {},
enabled = false,
label = "Açılış saati",
tagKey = "opening"
)
private const val OPENS = 9
private const val BOOKED = 14
Salt okunur: yalnız seçiciden
Salt okunur bir alan yazılmaz: saat yalnız seçiciden seçilir. Kutuya basmak, Enter ya da Boşluk seçiciyi açar. Saatin bir listeden seçilmesi gereken yerler için.
var departure by remember { mutableStateOf<PantrixTime?>(null) }
PantrixTimeTextField(
value = departure,
onValueChange = { departure = it },
readOnly = true,
label = "Kalkış saati",
placeholder = "Seçiciden seçin",
minuteStep = QUARTER,
tagKey = "departure"
)
private const val QUARTER = 15
Forma bağlı
Bir formun alanına bağlı: saat boşken "Kaydet" hatayı gösterir ve odağı alana gönderir. Hata alandan çıkınca da görünür; seçiciye geçmek alandan çıkmak sayılmaz. Saat olmayan rakamlar değeri null bırakır, kural onu yakalar.
val form = rememberFormState()
val scope = rememberCoroutineScope()
val report = LocalExampleEvents.current
val start = form.field<PantrixTime?>("shift_start", initial = null, Rules.required("Vardiyanın başlangıcını yazın"))
PantrixTimeTextField(
field = start,
modifier = Modifier.fillMaxWidth(),
form = form,
label = "Vardiya başlangıcı",
minuteStep = QUARTER
)
PantrixButton(
text = "Kaydet",
onClick = { scope.launch { form.submit { report("Kaydedildi") } } },
form = form,
tagKey = "save_shift"
)
private const val QUARTER = 15
Bir durumla
Bir durumla: state.time alanın saati, state.text yazılan rakamlar. İkisi birlikte boş alanı yarım yazılmış alandan ayırır. Düğme durumun saatini değiştirir; alan onu kendisi yazar, 12 saatte günün yarısıyla birlikte.
val state = rememberTimeTextFieldState()
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
PantrixTimeTextField(
state = state,
label = "Hatırlatma",
is24Hour = false,
tagKey = "reminder"
)
PantrixText(
text = when {
state.time != null -> "Saat: ${state.time}"
state.text.isEmpty() -> "Alan boş"
else -> "Yarım: ${state.text}"
},
style = PantrixTheme.typography.body
)
PantrixButton(
text = "Şimdiyi yaz",
onClick = { state.time = PantrixTime.now() },
variant = ButtonVariant.Outline,
tagKey = "write_now"
)
}
API
value
Günün bir saati için bir metin alanı: saat rakamlarla yazılır ya da kutunun sonundaki bir düğmenin açtığı bir saat seçiciden seçilir.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
value | PantrixTime? | alanın gösterdiği saat ya da null. | |
onValueChange | (PantrixTime?) -> Unit | kullanıcı alanın saatini her değiştirdiğinde söylenir: bir saat, ya da hiçbiri için null. | |
modifier | Modifier | Modifier | bütün alanın modifier'ı: etiketi, kutusu ve altındakiler. |
enabled | Boolean | true | alanın kullanılıp kullanılamayacağı. Kullanılamayan bir alan odak almaz ve seçici açmaz. |
readOnly | Boolean | false | saatin yazılmayıp yalnız seçiciden seçilip seçilemeyeceği. |
label | String? | null | alanın ne için olduğu, kutunun üstüne yazılır: ekran okuyucu için alanın ve seçicisinin adı. |
placeholder | String? | null | kutu boşken, alanın kendisinin gösterdiği düzenin yerinde gösterilir. |
supportingText | String? | null | kutunun altındaki yardım. error ile neyin düzeltileceğini söyleyen mesajdır; onsuz, alanın kendi hatası varken onun yerini alır. |
error | Boolean | false | çağıranın saati yanlış bulup bulmadığı, önceden alınmış bir saat gibi: alan hatalı çizilir ve mesaj supportingText'tir. |
leadingIcon | (@Composable () -> Unit)? | null | metnin önünde duran. Bir yuva içine konanı boyutlandırmaz. |
showClearButton | Boolean | false | alan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir. |
minTime | PantrixTime? | null | alanın aldığı ilk saat ya da ilk olmaması için null. maxTime'dan sonraysa saatler bir gecenin saatleri gibi gece yarısını geçer. |
maxTime | PantrixTime? | null | alanın aldığı son saat ya da son olmaması için null. |
minuteStep | Int | 1 | seçicinin dakikalarının kaç dakika arayla geldiği, 1 ile 60 arası. Aralarında yazılan bir dakika alınır. |
is24Hour | Boolean | true | alanın ve seçicisinin bir günün saatlerini, 00 ile 23 arasını mı, yoksa 12 saatlik bir saatle mi saydığı. |
presentation | DatePickerPresentation | DatePickerPresentation.Adaptive | seçicinin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog. |
style | TextFieldStyle? | null | alanın bu çağrıya ait stili: kapsayan her stilin üstünde, yoğunluğun altında. |
colors | TextFieldColors? | null | bu çağrının alanın kendi renkleri, temanın rollerinin yerine. |
pickerStyle | TimePickerStyle? | null | bu çağrının kendi seçici stili. |
pickerColors | TimePickerColors? | null | bu çağrının kendi seçici renkleri. |
contentDescription | String? | null | label'ı olmayan alan için ekran okuyucunun söylediği. |
tagKey | String? | null | alanın otomasyon anahtarı: alan TimeTextField_<tagKey>, düğmesi TimeTextFieldClock_<tagKey>, günün yarısı TimeTextFieldPeriod_<tagKey>, temizleme düğmesi TimeTextFieldClear_<tagKey> ve seçicisi TimePicker_<tagKey>'dır. Alan seçicinin açıldığını ve onda bir değer seçildiğini bildirir, saati hiçbir zaman bildirmez. |
interactionSource | MutableInteractionSource? | null | alanın etkileşimleri, dışarı taşınmış: odağı, üstündeki işaretçi ve basışları. |
state
Çağıranın tuttuğu bir state üzerinde bir saat alanı; başka her bakımdan bir değerin PantrixTimeTextField'ı gibidir: durumun time'ı alanın saatidir, onu yazmak saati alana koyar, text'i de yarım yazılmış bir alanı boş bir alandan ayırır.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
state | TimeTextFieldState | yazılan rakamlar ve onların ettiği saat. rememberTimeTextFieldState() ile oluşturun. | |
modifier | Modifier | Modifier | bütün alanın modifier'ı: etiketi, kutusu ve altındakiler. |
enabled | Boolean | true | alanın kullanılıp kullanılamayacağı. Kullanılamayan bir alan odak almaz ve seçici açmaz. |
readOnly | Boolean | false | saatin yazılmayıp yalnız seçiciden seçilip seçilemeyeceği. |
label | String? | null | alanın ne için olduğu, kutunun üstüne yazılır: ekran okuyucu için alanın ve seçicisinin adı. |
placeholder | String? | null | kutu boşken, alanın kendisinin gösterdiği düzenin yerinde gösterilir. |
supportingText | String? | null | kutunun altındaki yardım. error ile mesajdır; onsuz, alanın kendi hatası varken onun yerini alır. |
error | Boolean | false | çağıranın saati yanlış bulup bulmadığı: alan hatalı çizilir ve mesaj supportingText'tir. |
leadingIcon | (@Composable () -> Unit)? | null | metnin önünde duran. |
showClearButton | Boolean | false | alan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir. |
minTime | PantrixTime? | null | alanın aldığı ilk saat ya da ilk olmaması için null; maxTime'dan sonraysa saatler gece yarısını geçer. |
maxTime | PantrixTime? | null | alanın aldığı son saat ya da son olmaması için null. |
minuteStep | Int | 1 | seçicinin dakikalarının kaç dakika arayla geldiği, 1 ile 60 arası. |
is24Hour | Boolean | true | alanın ve seçicisinin bir günün saatlerini mi, yoksa 12 saatlik bir saatle mi saydığı. |
presentation | DatePickerPresentation | DatePickerPresentation.Adaptive | seçicinin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog. |
style | TextFieldStyle? | null | bu çağrının alanın kendi stili. |
colors | TextFieldColors? | null | bu çağrının alanın kendi renkleri. |
pickerStyle | TimePickerStyle? | null | bu çağrının kendi seçici stili. |
pickerColors | TimePickerColors? | null | bu çağrının kendi seçici renkleri. |
contentDescription | String? | null | label'ı olmayan alan için ekran okuyucunun söylediği. |
tagKey | String? | null | alanın otomasyon anahtarı; bir değerin PantrixTimeTextField'ı onu nasıl alıyorsa öyle. |
interactionSource | MutableInteractionSource? | null | alanın etkileşimleri, dışarı taşınmış. |
field
Bir formun alanına bağlı bir saat alanı: saati, hatası ve adı field'dan gelir.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
field | FormField<PantrixTime?> | saat alanının gösterdiği ve değiştirdiği formun alanı. | |
modifier | Modifier | Modifier | bütün alanın modifier'ı. |
form | FormState? | null | verilirse klavyenin eylem tuşu formu ona kayıtlı düğme üzerinden gönderir. |
enabled | Boolean | true | alanın kullanılıp kullanılamayacağı. |
readOnly | Boolean | false | saatin yalnız seçiciden seçilip seçilemeyeceği. |
label | String? | null | alanın ne için olduğu, kutunun üstünde yazılı. |
placeholder | String? | null | kutu boşken, düzenin yerinde gösterilir. |
supportingText | String? | null | kutunun altındaki yardım, alanın orada gösterecek bir hatası yokken. |
leadingIcon | (@Composable () -> Unit)? | null | metnin önünde duran. |
showClearButton | Boolean | false | alan yazılabilirken ve boş değilken onu boşaltan bir düğme gösterir. |
minTime | PantrixTime? | null | alanın aldığı ilk saat ya da ilk olmaması için null; maxTime'dan sonraysa saatler gece yarısını geçer. |
maxTime | PantrixTime? | null | alanın aldığı son saat ya da son olmaması için null. |
minuteStep | Int | 1 | seçicinin dakikalarının kaç dakika arayla geldiği, 1 ile 60 arası. |
is24Hour | Boolean | true | alanın ve seçicisinin bir günün saatlerini mi, yoksa 12 saatlik bir saatle mi saydığı. |
presentation | DatePickerPresentation | DatePickerPresentation.Adaptive | seçicinin neyde açıldığı: varsayılan dar bir pencerede bir sheet, daha geniş pencerede kutunun altında bir popover, açılırken seçilir; ya da her zaman bir popover, bir sheet ya da bir dialog. |
style | TextFieldStyle? | null | bu çağrının alanın kendi stili. |
colors | TextFieldColors? | null | bu çağrının alanın kendi renkleri. |
pickerStyle | TimePickerStyle? | null | bu çağrının kendi seçici stili. |
pickerColors | TimePickerColors? | null | bu çağrının kendi seçici renkleri. |
contentDescription | String? | null | label'ı olmayan alan için ekran okuyucunun söylediği. |
interactionSource | MutableInteractionSource? | null | alanın etkileşimleri, dışarı taşınmış. |
TextFieldStyle
PantrixTextField'ın kutusu: şekli, en az yüksekliği ve genişliği, metninin çevresindeki boşluk, ikonları ve kenarlığı.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
shape | ShapeSpec | ShapeSpec.Unspecified | Kutunun şekli. Tam yuvarlak bir şekil, ShapeRole.Full, yalnızca alan tek satır tutarken bir haptır: birkaç satırlı bir alan onun yerine ShapeRole.Large alır, çünkü bir kapsülün eğrisi metninin ilk satırına girer. |
height | Dp | Dp.Unspecified | Kutunun en az yüksekliği. |
minWidth | Dp | Dp.Unspecified | Kutunun en az genişliği: boş bir alanın, kullanıcı içine yazdıkça genişlemesini önler. |
horizontalPadding | Dp | Dp.Unspecified | İkon olmayan yerde, kutunun kenarı ile metni arasındaki boşluk. |
verticalPadding | Dp | Dp.Unspecified | Metnin ilk satırının üstündeki ve son satırının altındaki boşluk. |
iconPadding | Dp | Dp.Unspecified | Yuvasındaki bir ikonun çevresindeki boşluk. |
iconSize | Dp | Dp.Unspecified | Yuvadaki bir ikonun alması gereken boyut. Yuva, içine konanı boyutlandırmaz. |
borderWidth | Dp | Dp.Unspecified | Kutunun kenarlığının kalınlığı. |
focusedBorderWidth | Dp | Dp.Unspecified | Alan odaktayken kenarlığın kalınlığı: odağı gösteren kenarlıktır. |
textRole | TypeRole? | null | Metnin yazıldığı, yer tutucunun da yazıldığı yazı ölçeği rolü: Android'de ve iOS'ta body, 16sp, Material 3'ün ve iOS'un bir alana yazdığı gibi; masaüstünde ve web'de label, 14sp, işaretçiyle kullanılan bir sayfadaki gibi. Bir select'in kutusu ve bu stille kurulan alanlar da onu alır. |
TextFieldColors
Temanın renklerini almayan bir alan için PantrixTextField'ın boyandığı renkler: verilen renk kullanılır, verilmeyen temadaki rolünde kalır. Bir ürün yalnızca değiştirdiği renkleri verir, başkasını vermez:
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
container | Color | Color.Unspecified | Kutunun dolgusu. Temanın surface rengi. |
border | Color | Color.Unspecified | Dinlenirken kutunun kenarlığı. Temanın border rengi. |
hoveredBorder | Color | Color.Unspecified | Fare üstündeyken kenarlık. Temanın borderHover rengi: border'dan bir basamak güçlüsü. |
focusedBorder | Color | Color.Unspecified | Alan odaktayken kenarlık. Temanın primary rengi. |
error | Color | Color.Unspecified | Metnin yanlış olduğunu söyleyenler: kenarlık, etiket, kutunun altındaki mesaj, imleç ve sınırını aştığında sayaç. Temanın danger rengi. |
text | Color | Color.Unspecified | Yazılan metin. Temanın textPrimary rengi. |
label | Color | Color.Unspecified | Kutunun üstündeki etiket. Verilmezse, alanın durduğu yerde herhangi bir metin nasıl çiziliyorsa öyle çizilir, çünkü etiket kutunun dışında, alan neyin üstüne konmuşsa onun üstündedir: temanın kendi zemininde textPrimary ile, bir dolgunun üstünde o dolgunun içerik rengiyle. |
placeholder | Color | Color.Unspecified | Yer tutucu. Temanın textSecondary rengi. |
supportingText | Color | Color.Unspecified | Kutunun altındaki yardım metni ve sayaç. Temanın textSecondary rengi. |
icon | Color | Color.Unspecified | Yuvadaki bir ikonun, kendi rengini vermedikçe çizildiği renk ve temizleme düğmesinin çarpısı. Temanın textSecondary rengi. |
cursor | Color | Color.Unspecified | İmleç ve onunla birlikte bir seçimin tutamaçları ile zemini. Temanın primary rengi. |
scrollBar | Color | Color.Unspecified | Birkaç satırlı bir kutunun metninin ne kadar kaydığını gösteren çubuk. Temanın borderStrong'u: metnin yanında bir işarettir ve kutunun yumuşak kenarı orada görünmezdi. |