Cette page explique comment styliser le texte de vos
paragraphe. Pour définir un style au niveau du paragraphe, vous pouvez configurer des paramètres tels que
textAlign
et lineHeight
, ou définissez votre propre ParagraphStyle
.
Définir l'alignement du texte
Le paramètre textAlign
vous permet de définir l'alignement horizontal du texte dans une zone modulable Text
.
Par défaut, Text
sélectionne l'alignement de texte naturel en fonction de la valeur de son contenu :
- Bord gauche du conteneur
Text
pour les alphabets de gauche à droite tels que le latin, le cyrillique ou le hangûl - Bord droit du conteneur
Text
pour les alphabets de droite à gauche tels que l'arabe ou l'hébreu
@Composable fun CenterText() { Text( "Hello World", textAlign = TextAlign.Center, modifier = Modifier.width(150.dp) ) }
Si vous souhaitez définir manuellement l'alignement du texte d'un composable Text
, préférez TextAlign.Start
et TextAlign.End
au lieu de TextAlign.Left
et TextAlign.Right
respectivement, car ils définissent le côté approprié du composable Text
en fonction de l'orientation du texte de la langue préférée. Par exemple, TextAlign.End
aligne le texte français vers la droite et le texte arabe vers la gauche, mais TextAlign.Right
aligne le texte vers la droite, quel que soit l'alphabet utilisé.
Ajouter plusieurs styles dans un paragraphe
Pour ajouter plusieurs styles dans un paragraphe, vous pouvez utiliser ParagraphStyle
dans un AnnotatedString
, qui peut être annoté avec des styles d'annotations arbitraires.
Lorsqu'une partie de votre texte est marquée à l'aide d'un ParagraphStyle
, elle est
séparés du texte restant, comme s'il comportait des sauts de ligne au début et
à la fin.
Pour en savoir plus sur l'ajout de plusieurs styles dans un texte, consultez Ajouter plusieurs styles au texte
AnnotatedString
dispose d'un type sûr
professionnel
pour faciliter la création: buildAnnotatedString
. L'extrait suivant utilise buildAnnotatedString
pour définir ParagraphStyle
:
@Composable fun ParagraphStyle() { Text( buildAnnotatedString { withStyle(style = ParagraphStyle(lineHeight = 30.sp)) { withStyle(style = SpanStyle(color = Color.Blue)) { append("Hello\n") } withStyle( style = SpanStyle( fontWeight = FontWeight.Bold, color = Color.Red ) ) { append("World\n") } append("Compose") } } ) }
Ajuster la hauteur de ligne et la marge intérieure
includeFontPadding
est une ancienne propriété qui ajoute une marge intérieure supplémentaire en fonction
les métriques de police en haut de la première ligne et en bas de la dernière ligne d'un texte.
À partir de la version 2024.01.01
de la nomenclature Compose, includeFontPadding
est défini
à false
par défaut, ce qui permet d'aligner la mise en page de texte par défaut sur celle
les outils de conception courants.
La possibilité de configurer lineHeight
n'est pas nouvelle : elle était déjà disponible
depuis Android Q. Vous pouvez configurer lineHeight
pour Text
à l'aide de la
lineHeight
, qui répartit la hauteur de la ligne dans chaque ligne de
du texte. Vous pouvez ensuite utiliser le nouveau LineHeightStyle API
pour configurer davantage
l'alignement de ce texte dans l'espace, puis supprimez les espaces.
Vous pouvez ajuster lineHeight
en utilisant l'unité de texte "em" (police relative).
) au lieu de "sp" (pixels mis à l'échelle) pour une meilleure précision. Pour en savoir plus sur
pour sélectionner une unité de texte appropriée, consultez TextUnit
.

lineHeight
défini et supprimer l'espace supplémentaire si nécessaire.
Text( text = text, style = LocalTextStyle.current.merge( TextStyle( lineHeight = 2.5.em, platformStyle = PlatformTextStyle( includeFontPadding = false ), lineHeightStyle = LineHeightStyle( alignment = LineHeightStyle.Alignment.Center, trim = LineHeightStyle.Trim.None ) ) ) )
En plus d'ajuster lineHeight
, vous pouvez désormais centrer et styliser davantage le texte
En utilisant des configurations avec l'API expérimentale LineHeightStyle
: LineHeightStyle.Alignment
et LineHeightStyle.Trim
(includeFontPadding
doit être défini sur false
pour
Couper pour ajuster au travail). L'alignement et le recadrage utilisent l'espace mesuré entre les lignes de texte pour le répartir plus judicieusement sur toutes les lignes, y compris une seule ligne de texte et la ligne supérieure d'un bloc de texte.
LineHeightStyle.Alignment
définit comment aligner la ligne dans l'espace fourni par la hauteur de ligne. Dans chaque ligne, vous pouvez aligner le texte en haut, en bas, au centre ou proportionnellement. LineHeightStyle.Trim
vous permet ensuite de laisser ou de supprimer l'espace supplémentaire en haut de la première ligne et en bas de la dernière ligne de votre texte, généré à partir de tout ajustement lineHeight
et d'alignement. Les exemples suivants montrent à quoi ressemble le texte multiligne avec différentes configurations LineHeightStyle.Trim
lorsque l'alignement est centré (LineHeightStyle.Alignment.Center
).
![]() |
![]() |
LineHeightStyle.Trim.None |
LineHeightStyle.Trim.Both |
![]() |
![]() |
LineHeightStyle.Trim.FirstLineTop |
LineHeightStyle.Trim.LastLineBottom |
Pour en savoir plus, consultez l'article de blog Corriger la marge intérieure de la police dans le texte Compose.
plus d'informations sur le contexte de ce changement et sur le fonctionnement de includeFontPadding
dans la vue
système, et les modifications apportées à Compose et au nouveau LineHeightStyle
API.
Insérer des sauts de ligne
L'API LineBreak
définit les critères en fonction desquels le texte est divisé sur plusieurs lignes. Vous pouvez spécifier le type de coupure de ligne souhaité dans le bloc TextStyle
de votre composable Text
. Types de saut de ligne prédéfinis
incluent les éléments suivants:
Simple
: coupure de ligne rapide et de base. Recommandé pour les champs de saisie de texte.Heading
: rupture de ligne avec des règles plus strictes. Recommandé pour les Shorts du texte, comme les titres.Paragraph
: saut de ligne plus lent et de meilleure qualité pour améliorer la lisibilité. Recommandé pour les textes plus longs, comme les paragraphes.
L'extrait de code suivant utilise à la fois Simple
et Paragraph
pour spécifier
saut de ligne sur un long bloc de texte:
TextSample( samples = mapOf( "Simple" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Simple ) ) }, "Paragraph" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph ) ) } ) )

Dans la sortie ci-dessus, notez que le comportement de coupure de ligne Paragraph
produit un résultat plus équilibré visuellement que la coupure de ligne Simple
.
Personnaliser les sauts de ligne
Vous pouvez également créer votre propre configuration LineBreak
avec le paramètre Strategy
. L'élément Strategy
peut avoir l'une des valeurs suivantes :
Balanced
: tente d'équilibrer la longueur du texte en appliquant également le trait d'union automatique s'il est activé. Recommandé pour les petits écrans, comme les montres, afin de maximiser la quantité de texte affichée.HighQuality
: optimise un paragraphe pour améliorer la lisibilité du texte, y compris l'espacement des mots si cette option est activée. (Doit être utilisé par défaut pour tout ce qui n'est pasBalanced
ouSimple
.)Simple
: stratégie basique et rapide Si cette option est activée, le trait d'union n'est effectué que pour des mots qui n'entrent pas sur une ligne entière. Utile pour modifier le texte afin d'éviter de changer de position pendant la saisie.
L'extrait de code suivant montre la différence entre un paragraphe avec les paramètres par défaut et un paragraphe optimisé pour les petits écrans avec la stratégie de coupure de ligne Balanced
:
TextSample( samples = mapOf( "Balanced" to { val smallScreenAdaptedParagraph = LineBreak.Paragraph.copy(strategy = LineBreak.Strategy.Balanced) Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(200.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = smallScreenAdaptedParagraph ) ) }, "Default" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(200.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default ) } ) )

Balanced
(haut) par rapport à un paragraphe mis en forme sans stratégie de saut de ligne.Considérations relatives à CJK
Vous pouvez également personnaliser LineBreak
avec Strictness
et
Les API WordBreak
, conçues spécifiquement pour les langages CJK.
Il est possible que vous ne voyiez pas toujours les effets de ces API dans des langues autres que le CJK. Globalement,
les règles de saut de ligne sont définies en fonction des paramètres régionaux.
Strictness
décrit la sévérité de la ligne, avec l'expression suivante :
propriétés:
Default
: règles destructives par défaut pour les paramètres régionaux. Peut correspondre àNormal
ouStrict
.Loose
: règles les moins restrictives. (Convient aux lignes courtes).Normal
: règles les plus courantes pour le forçage de la ligne.Strict
: règles les plus strictes pour le forçage de la ligne.
WordBreak
définit la manière dont les sauts de ligne doivent être insérés dans les mots avec l'élément
les propriétés suivantes:
Default
: règles de rupture par défaut pour les paramètres régionaux.Phrase
: le retour à la ligne est basé sur des phrases.
L'extrait de code suivant utilise une sévérité Strict
et une rupture de mot Phrase
pour un texte en japonais:
val customTitleLineBreak = LineBreak( strategy = LineBreak.Strategy.HighQuality, strictness = LineBreak.Strictness.Strict, wordBreak = LineBreak.WordBreak.Phrase ) Text( text = "あなたに寄り添う最先端のテクノロジー。", modifier = Modifier.width(250.dp), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = customTitleLineBreak ) )

Strictness
et WordBreak
(en haut)
par rapport au texte mis en forme uniquement avec LineBreak.Heading
(en bas).Traiter le texte scindé sur plusieurs lignes
L'API Hyphens
vous permet d'ajouter une prise en charge des tirets dans votre application.
Un trait d'union consiste à insérer un signe de ponctuation en tiret pour indiquer qu'un
le mot est divisé sur plusieurs lignes de texte. Lorsque cette option est activée, un trait d'union est ajouté entre
les syllabes d'un mot aux points de trait d'union appropriés.
Par défaut, le césure n'est pas activé. Pour activer le césure, ajoutez Hyphens.Auto
comme paramètre dans un bloc TextStyle
:
TextSample( samples = mapOf( "Hyphens - None" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph, hyphens = Hyphens.None ) ) }, "Hyphens - Auto" to { Text( text = SAMPLE_LONG_TEXT, modifier = Modifier .width(130.dp) .border(BorderStroke(1.dp, Color.Gray)), fontSize = 14.sp, style = TextStyle.Default.copy( lineBreak = LineBreak.Paragraph, hyphens = Hyphens.Auto ) ) } ) )

Lorsque l'option est activée, le césure ne s'applique que dans les conditions suivantes :
- Un mot ne tient pas sur une ligne. Si vous utilisez une stratégie de saut de ligne
Simple
, le trait d'union d'un mot ne se produit que si une ligne est plus courte que l'unique d'un mot. - Les paramètres régionaux appropriés sont définis sur votre appareil, en fonction du trait d'union déterminé à l'aide des dictionnaires présents sur le système.
Recommandations personnalisées
- Remarque : Le texte du lien s'affiche lorsque JavaScript est désactivé
- Styler le texte
- Principes de base de la mise en page dans Compose
- Mesures intrinsèques dans les mises en page Compose