334 votes

ReactNative : comment centrer le texte ?

Comment centrer un texte dans ReactNative à l'horizontale et à la verticale ?

J'ai un exemple d'application dans rnplay.org où justifyContent="center" et alignItems="center" ne fonctionne pas : https://rnplay.org/apps/AoxNKQ

Le texte devrait être centré. Et pourquoi y a-t-il une marge en haut entre le texte (jaune) et le conteneur parent ?

Code :

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  Image,
  View,
} = React;

var SampleApp = React.createClass({
  render: function() {
    return (
            <View style={styles.container}>
                <View style={styles.topBox}>
                    <Text style={styles.headline}>lorem ipsum{'\n'}ipsum lorem lorem</Text>

                </View>
                <View style={styles.otherContainer}>
                </View>
            </View>
    );
  }
});

var styles = StyleSheet.create({

    container: {
        flex: 1,
        flexDirection: 'column',
        backgroundColor: 'red',
        justifyContent: 'center',
        alignItems: 'center',
    },

    topBox: {
        flex: 1,
        flexDirection: 'row',
        backgroundColor: 'lightgray',
        justifyContent: 'center',
        alignItems: 'center',
    },
    headline: {
        fontWeight: 'bold',
        fontSize: 18,
    marginTop: 0,
        width: 200,
        height: 80,
    backgroundColor: 'yellow',
        justifyContent: 'center',
        alignItems: 'center',
    },

  otherContainer: {
        flex: 4,
        justifyContent: 'center',
        alignItems: 'center',
    backgroundColor: 'green',
    },

});

AppRegistry.registerComponent('SampleApp', () => SampleApp);

module.exports = SampleApp;

0 votes

Comme ça : rnplay.org/apps/1hbnSA ?

1 votes

Ce n'est pas centré horizontalement

1 votes

Ok, alors ça : rnplay.org/apps/1hbnSA , mis à jour

515voto

Cherniv Points 12988

De headline Suppression du style height , justifyContent et alignItems . Cela permettra de centrer le texte verticalement. Ajouter textAlign: 'center' et le texte sera centré horizontalement.

  headline: {
    textAlign: 'center', // <-- the magic
    fontWeight: 'bold',
    fontSize: 18,
    marginTop: 0,
    width: 200,
    backgroundColor: 'yellow',
  }

30 votes

Ne fonctionne pas avec un width à moins que vous ne l'enveloppiez dans un <View> avec justifyContent: 'center', alignItems: 'center',

4 votes

Votre magie n'a pas opéré cependant width: "100%", a travaillé

0 votes

Cette magie fonctionne vraiment. textAlign : 'center' (alignement du texte)

96voto

garrettmac Points 4292

Déjà répondu mais j'aimerais ajouter un peu plus sur le sujet et les différentes façons de le faire en fonction de votre cas d'utilisation.

Vous pouvez ajouter adjustsFontSizeToFit={true} (actuellement non documenté) à Text Composant permettant d'ajuster automatiquement la taille à l'intérieur d'un nœud parent.

  <Text adjustsFontSizeToFit={true} numberOfLines={1}>Hiiiz</Text>

Vous pouvez également ajouter les éléments suivants dans votre composant de texte :

<Text style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>

Ou vous pouvez ajouter ce qui suit dans le parent du composant Texte :

<View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text>Hiiiz</Text>
</View>

ou les deux

 <View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>
</View>

ou les trois

 <View style={{flex:1,justifyContent: "center",alignItems: "center"}}>
     <Text adjustsFontSizeToFit={true} 
           numberOfLines={1} 
           style={{textAlignVertical: "center",textAlign: "center",}}>Hiiiz</Text>
</View>

Tout dépend de ce que vous faites. Vous pouvez également consulter mon article de blog complet sur le sujet.

https://medium.com/@vygaio/how-to-auto-adjust-text-font-size-to-fit-into-a-nodes-width-in-react-native-9f7d1d68305b

0 votes

Il faut s'y attendre : <Texte style={{textAlignVertical : "center",textAlign : "center",}}>Hiiiz</Text>

0 votes

Vous m'avez fait gagner une heure et demie. J'essayais de faire la même chose mais je n'y arrivais pas avant cette réponse : textAlignVertical: "center", textAlign: "center" en tant que composant <Text/> Style.

0 votes

TextAlignVertical est uniquement pour Android. Aucune de ces solutions ne permet d'aligner mon texte verticalement, mais seulement horizontalement.

22voto

mocanSergiu666 Points 123

Définissez ces styles pour le composant image : { textAlignVertical : "center", textAlign : "center" }

19voto

Muzammil Points 387
textAlignVertical: "center"

est la vraie magie.

11voto

Mahdi Bashirpour Points 1406

Ceci est un exemple pour Horizontal et Vertical alignement simultané

<View style={{width: 200, flexDirection: 'row',alignItems: 'center'}}>
     <Text style={{width: '100%',textAlign: 'center'}} />
</View>

0 votes

Merci pour l'indication que les styles en ligne doivent être entourés de {{double-curly-braces}}.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X