Preskočiť na obsah
Android

Jetpack Compose Basics - Ako používať text field composables pre splnenie Material design špecifikácie

Peter Šuly2. 11. 2021
Jetpack Compose Basics - Ako používať text field composables pre splnenie Material design špecifikácie

Textové pole je súčasť používateľského rozhrania, ktorá umožňuje používateľom zadávať textové informácie, spravidla vo formulároch. Textové polia v Material dizajne majú dva typy: Vyplnené textové polia alebo Obrysové textové polia. Oba poskytujú rovnakú funkcionalitu, takže tvoj výber by mal byť založený na preferenciách štýlu. Neodporúča sa ich miešať.

Oba typy textových polí pozostávajú z kontajnera (1), voliteľnej úvodnej ikony (2), štítka (3), vstupného textu (4), voliteľnej koncovej ikony (5), indikátora aktivácie (6) a voliteľného pomocného textu (7)

Obrysové textové pole v Jetpack Compose

Compose poskytuje OutlinedTextField, ktorý je composable tak, aby spĺňal špecifikáciu Material Designu. Bez ďalšieho prispôsobenia vyzerá OutlinedTextField takto

Táto composable má okolo 20 parametrov, ale iba dve z nich sú povinné.

  • value - text zobrazený v textovom poli
  • onValueChange - callback sa spustí, keď vstupná služba aktualizuje text, ktorý je parametrom callbacku
     
@Composable
fun OutlinedTextField(
    value: String,
    onValueChange: (String) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    readOnly: Boolean = false,
    textStyle: TextStyle = LocalTextStyle.current,
    label: @Composable (() -> Unit)? = null,
    placeholder: @Composable (() -> Unit)? = null,
    leadingIcon: @Composable (() -> Unit)? = null,
    trailingIcon: @Composable (() -> Unit)? = null,
    isError: Boolean = false,
    visualTransformation: VisualTransformation = VisualTransformation.None,
    keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
    keyboardActions: KeyboardActions = KeyboardActions.Default,
    singleLine: Boolean = false,
    maxLines: Int = Int.MAX_VALUE,
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    shape: Shape = MaterialTheme.shapes.small,
    colors: TextFieldColors = TextFieldDefaults.outlinedTextFieldColors()
)

Voliteľné parametre, ktoré môžu byť customizovateľné sú:

  • modifier - slúži na zmeny zo strany volajúceho
  • enabled - boolean, ktorý riadi, či je textové pole v enabled state. Ak je povolená možnosť false, textové pole nie je možné upravovať, focusovať ani vyberať.
  • readOnly - keď je parameter true, text v poli je možné focusovať a používateľ ho môže kopírovať, ale nemôže ho upravovať
  • štýl textu - štýl vstupného textu. Dá sa ľahko upraviť napr. takto ⬇️
  • label - štítok, ktorý sa má zobraziť vo vnútri kontajnera alebo v focusnutom stave na vrchu kontajnera. Dá sa použiť takto ⬇️
label = { Text(text = "Label for text") }

 

  • placeholder - zástupný symbol, ktorý sa má zobraziť, ak je pole prázdne
placeholder = { Text(text = "Placeholder for text") }

 

  • leadingIcon - composables, ktoré sa majú zobraziť na začiatku poľa
leadingIcon = { Icon(imageVector = Icons.Default.Info, contentDescription = "") }

//OR

leadingIcon = { Text(text = "$") }
  • trailingIcon - v zásade to isté ako leaderIcon, ale na konci poľa
  • isError - označuje, či je aktuálna textová hodnota v chybovom stave. Ak je nastavený na hodnotu true, štítok chyby a koncová ikona sa zobrazia zafarbené na chybovú farbu. Ak nie je zadaný žiadny štítok a koncová ikona, iba kontajner bude zafarbený na chybovú farbu
  • visualTransformation - transformuje vizuálnu reprezentáciu vstupnej hodnoty, napríklad ukazuje '*' pri písaní hesla. Pre tento prípad použitia existuje PasswordVisualTransformation, ale je ľahké implementovať svoj vlastný
visualTransformation = PasswordVisualTransformation()
  • keyboardOptions - možnosti softvérovej klávesnice používané na konfiguráciu KeyboardType, ImeAction a ďalších
keyboardOptions = KeyboardOptions.Default.copy(
    capitalization = KeyboardCapitalization.Words,
    autoCorrect = false,
    keyboardType = KeyboardType.Text,
    imeAction = ImeAction.Search
)
  • keyboardActions - keď vstupná služba vyšle akciu, zavolá sa zodpovedajúci callback
keyboardActions = KeyboardActions(
    onAny = {} // do when ANY of ime actions is emitted
)

//OR

keyboardActions = KeyboardActions(
    onDone = {}, // do when SPECIFIED action is emitted
    onSearch = {},
    .
    .
}
  • singleLine - či má byť text iba na jednom riadku s horizontálnym posúvaním. Parameter  maxLines je ignorovaný, ak je singleLine pravdivé
  • maxLines  - maximálny počet riadkov
  • actionSource - MutableInteractionSource predstavujúci prúd interakcií pre túto composable zložku. Možno použiť, ak chcete sledovať interakcie a prispôsobiť vzhľad alebo správanie skladateľných skladieb
  • shape - tvar okraja polí
  • colors  - inštancia objektu TextFieldColors ovládajúceho farbu častí poľa. Dajú sa ľahko zmeniť týmto spôsobom ⬇️
colors = TextFieldDefaults.outlinedTextFieldColors(
    focusedBorderColor = Color.Yellow,
    leadingIconColor = Color.Yellow
)

Vyplnené textové pole v Jetpack Compose

Compose poskytuje textové pole, ktoré je možné zostaviť tak, aby spĺňalo Material Design špecifikáciu vyplneného textového poľa. Bez ďalšieho prispôsobenia vyzerá textové pole takto:

Všetky parametre composable funkcie TextField sú rovnaké ako pre OutlinedTextField (okrem iného tvaru a farieb) a majú rovnaké použitie.

Pole TextField, ktoré je nastavené ako false

Textové pole so štítkom

Textové pole s úvodnou ikonou

TextField v chybovom stave

Ďalšie články zo série Jetpack Compose Basics:

Späť na články
Zdieľať ďalej
Ozvite sa kedykoľvek

Pripravení rozbehnúť projekt?
Poďme stavať spolu.

Dohodnite si hovor alebo nám napíšte e-mail.

Kontaktujte nás

Neviete, kde začať? Stiahnite si našu šablónu produktového zadania.