3
votes

Jetpack Compose - Colonne - Centre de gravité

Je crée une mise en page avec Jetpack Compose et il y a une colonne. Je voudrais des éléments centraux dans cette colonne:

 Column(modifier = ExpandedWidth) {
        Text(text = item.title)
        Text(text = item.description)
 }


0 commentaires

10 Réponses :


1
votes

Vous pouvez utiliser Column(crossAxisAlignment = CrossAxisAlignment.Center) . Cela fonctionne comme la gravité.


1 commentaires

malheureusement, il n'est pas disponible dans dev-03



1
votes

Vous pouvez utiliser Arrangement.Center

  • Placer les composants enfants aussi près que possible du centre de l'axe principal

CODE D'ÉCHANTILLON

@Composable
fun Column(

    arrangement: Arrangement = Arrangement.Center,

)


0 commentaires

5
votes

Vous avez la possibilité d'appliquer la gravité sur les éléments individuels comme suit, puis il centrera les éléments.

Column(modifier = ExpandedWidth) {
       Text(modifier = Gravity.Center, text = item.title)
       Text(modifier = Gravity.Center, text = item.description)
}


3 commentaires

Cette réponse est obsolète, car Text n'autorise pas Gravity maintenant


Text(text = item.title, modifier = Modifier.gravity(Alignment.CenterHorizontally))


Avec alpha07 , utilisez Text(text = item.title, modifier = Modifier.align(Alignment. CenterHorizontally))



0
votes

Vous pouvez utiliser FlexColumn pour amener le contenu au centre car il prend en charge CrossAxisAlignment.

FlexColumn(mainAxisAlignment = MainAxisAlignment.Center,
        crossAxisAlignment = CrossAxisAlignment.Center) {
    inflexible {
        Text(text = item.title)
        Text(text = item.description)
    }
}

Déformez-le à l'intérieur de manière inflexible afin que les widgets n'occupent pas le plein écran.

De la même manière, si vous souhaitez placer des vues au centre de l'écran avec FlexColumn, utilisez mainAxisAlignment avec crossAxisAlignment

FlexColumn(crossAxisAlignment = CrossAxisAlignment.Center) {
    inflexible {
        Text(text = item.title)
        Text(text = item.description)
    }
}


0 commentaires

1
votes

Voici comment procéder à partir de la dernière version de compose (0.1.0-dev05)

Pour centrer le texte à l'intérieur de ce conteneur, vous devez utiliser le modificateur LayoutAlign .

Column(modifier = LayoutWidth.Fill + LayoutAlign.Center) {
    Text(text = item.title)
    Text(text = item.description)
}


0 commentaires

0
votes

si vous utilisez 0.1.0-dev09 vous pouvez modifier les attributs de gravité ou d'arrangement en utilisant les paramètres horizontalGravity et verticalArrangement

@Composable
fun centeredColumn() {
    return Column (
        modifier = Modifier.height(100.dp), 
        horizontalGravity = Alignment.CenterHorizontally, 
        verticalArrangement = Arrangement.Center
    ) {
            Image(asset = imageResource(id = R.drawable.ic_emojo_logo_white))
            Text(text = stringResource(id = R.string.login_subtitle))
    }
}


0 commentaires

14
votes

Avec 1.0.0-alpha03 vous pouvez utiliser ces paramètres :

Quelque chose comme:

Column(
        modifier = Modifier.fillMaxWidth(),
        horizontalAlignment = Alignment.CenterHorizontally
) {
    Box (  ) { ... }

entrez la description de l'image ici

Si vous voulez seulement centrer horizontalement, utilisez simplement:

Column(
        modifier = Modifier.fillMaxWidth().fillMaxHeight(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
) {
    Box (  ) {
        Text(
                text = "First item",
                modifier = Modifier.padding(16.dp)
        )
        Text(
                text = "Second item",
                modifier = Modifier.padding(16.dp)
        )
        Text(
                text = "Third item",
                modifier = Modifier.padding(16.dp)
        )
    }
}

entrez la description de l'image ici


3 commentaires

si vous utilisez une ligne, une idée les aligne-t-elle de sorte qu'une fonction composable soit au début et une autre au centre? quelque chose comme spaceEvenly dans flexbox en css ou comme dans le widget Row dans flutter api.flutter.dev/flutter/widgets/Row-class.html, vous pouvez utiliser mainAxisAlignment.spaceEvenly


@PeterHaddad developer.android.com/reference/kotlin/androidx/compose/… et consultez ce post: joebirch.co/android/exploring-jetpack-compose-column


1.0.0-alpha03 erreur d' align , mais j'ai mis à jour la dépendance de composition de jetpack vers 1.0.0-alpha03 et cela a fonctionné. Auparavant c'était 1.0.0-alpha02 merci!



0
votes

Vous pouvez utiliser Box , par défaut, il l'aligne dans un ColumnScope, vous pouvez penser à Box comme un conteneur pour des vues alignées verticalement si vous souhaitez aligner n'importe quel composant au lieu de créer à chaque fois une Column pour aligner les composants

@Composable
fun BoxDemo(){
    Box(modifier = Modifier.fillMaxSize(),gravity = Alignment.Center){
        Text(text = "First text",modifier = Modifier.padding(top = 8.dp))
        Text(text = "Second text",modifier = Modifier.padding(top = 8.dp))
        Text(text = "Third text",modifier = Modifier.padding(top = 8.dp))
    }
}


0 commentaires

0
votes

Centrer horizontalement

Column(modifier = Modifier.fillMaxWidth().fillMaxHeight(), verticalArrangement = Arrangement.Center) {
        Text(text = item.title)
        Text(text = item.description)
 }

Pour centrer à la fois horizontalement et verticalement dans la surface parent

Column(modifier = Modifier.fillMaxWidth()) {
        Text(text = item.title)
        Text(text = item.description)
 }


0 commentaires

0
votes

Vous pouvez définir l'alignement dans la ligne ou la colonne pour le texte composable dans alpha07

Text(text = "someText" , modifier = Modifier.align(Alignment.CenterVertically))


0 commentaires