ReactNative: comment centrer le texte?


212

Comment centrer le texte dans ReactNative à la fois horizontalement et verticalement?

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

Le texte doit ê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;


ce n'est pas centré horizontalement
itinance

1
ok, donc ceci: rnplay.org/apps/1hbnSA , mis à jour
Cherniv

WAAAA ... textAlign? je savais que ce serait quelque chose de vraiment stupide .... vous devriez poster ceci comme une réponse
itinance

Réponses:


356

De headline'style supprimer height, justifyContentet alignItems. Il centrera le texte verticalement. Ajoutez textAlign: 'center'et il centrera le texte horizontalement.

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

16
Ne fonctionne pas avec un widthsauf si vous l'enveloppez dans un <View>avecjustifyContent: 'center', alignItems: 'center',
Ryan Walker

59

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é) au Textcomposant pour 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 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


cela devrait être prévu: <Text style = {{textAlignVertical: "center", textAlign: "center",}}> Hiiiz </Text>
Tushar Pandey

mec tu m'as sauvé 1,5 heure. J'essayais de faire la même chose mais je n'ai pas pu jusqu'à cette réponse en tant que:, en tant textAlignVertical: "center", textAlign: "center" que <Text /> Style de composant.
ganeshdeshmukh

textAlignVertical est uniquement Android. Aucune de ces solutions n'aligne mon texte verticalement, seulement horizontalement.
sudo

14

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



9

ceci est un exemple d' alignement horizontal et vertical simultanément

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

Merci pour le conseil que les styles en ligne doivent être placés entre {{accolades doubles}}.
MarkHu

6

Alignement central horizontal et vertical

<View style={{flex: 1, justifyContent: 'center',alignItems: 'center'}}>
     <Text> Example Test </Text>
</View>

Seule solution qui a fonctionné pour moi en termes de centrage de <Text> à l'intérieur d'une <View> non seulement horizontalement, mais aussi verticalement. Je vous remercie!
RuntimeError

4

Vous pouvez utiliser une alignSelfpropriété sur le composant Texte

{ alignSelf : "center" }

4

Partout où vous avez un Textcomposant dans votre page, il vous suffit de définir le style du Textcomposant.

 <Text style={{ textAlign: 'center' }}> Text here </Text>

vous n'avez pas besoin d'ajouter d'autre propriété de style, c'est une magie spectaculaire qui vous mettra du texte au centre de votre interface utilisateur.


2

Ajout simple

textAlign: "center"

dans votre feuille de style, c'est tout. J'espère que cela vous aidera.

modifier: "centre"


2

La propriété suivante peut être utilisée: {{alignItems: 'center'}}

<View style={{alignItems: 'center'}}>
 <Text>Hello im centered text{this.props.name}!</Text>
</View>

1
Même si cela peut être la solution à la question, veuillez ajouter quelques explications afin que nous puissions tous apprendre.
harmonica141

S'il vous plaît, améliorez-le car vous utilisez deux astérisques pour faire circuler la correction principale mais ce n'est pas clair et l'autre partie est confuse
Frederiko Cesar


2

Définir dans la vue parent

justifyContent:center

et en vue enfant alignSelf: centre


Les clés doivent être dans un étui à chameaux justifyContentetalignSelf
Siddharth

1

En plus des cas d'utilisation mentionnés dans les autres réponses:

Pour centrer le texte dans le cas d'utilisation spécifique d'un BottomTabNavigator , n'oubliez pas de définir showIcon sur false (même si vous n'avez pas d'icônes dans TabNavigator). Sinon, le texte sera poussé vers le bas de l'onglet.

Par exemple:

const TabNavigator = createBottomTabNavigator({
  Home: HomeScreen,
  Settings: SettingsScreen
}, {
  tabBarOptions: {
    activeTintColor: 'white',
    inactiveTintColor: 'black',
    showIcon: false, //do this
    labelStyle: {
      fontSize: 20,
      textAlign: 'center',
    },
    tabStyle: {
      backgroundColor: 'grey',
      marginTop: 0,
      textAlign: 'center',
      justifyContent: 'center',
      textAlignVertical: "center"
    }
  }

0
const styles = StyleSheet.create({
        navigationView: {
        height: 44,
        width: '100%',
        backgroundColor:'darkgray',
        justifyContent: 'center', 
        alignItems: 'center' 
    },
    titleText: {
        fontSize: 20,
        fontWeight: 'bold',
        color: 'white',
        textAlign: 'center',
    },
})


render() {
    return (
        <View style = { styles.navigationView }>
            <Text style = { styles.titleText } > Title name here </Text>
        </View>
    )

}

0

ajouter d'abord dans la vue parent flex: 1, justificationContenu: 'centre', alignItems: 'centre'

puis dans le texte, ajoutez textAlign: 'center'

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.