ReactNative: come centrare il testo?


212

Come centrare il testo in ReactNative sia in orizzontale che in verticale?

Ho un'applicazione esemplificativa in rnplay.org dove justifyContent = "center" e alignItems = "center" non funziona: https://rnplay.org/apps/AoxNKQ

Il testo dovrebbe essere centrato. E perché c'è un margine in alto tra il testo (giallo) e il contenitore principale?

Codice:

'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;

In questo modo: rnplay.org/apps/1hbnSA ?
— Cherniv,

questo non è centrato orizzontalmente
— itinance

1
ok, quindi: rnplay.org/apps/1hbnSA , aggiornato
— Cherniv,

WAAAA ... textAlign? sapevo che sarebbe stato qualcosa di veramente stupido .... dovresti pubblicare questo come risposta
— itinance

Risposte:


356

Da headline'style remove height, justifyContente alignItems. Centrerà il testo verticalmente. Aggiungi textAlign: 'center'e centrerà il testo in orizzontale.

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

16
Non funziona con un a widthmeno che non lo avvolgi in un <View>conjustifyContent: 'center', alignItems: 'center',
— Ryan Walker

59

Ho già risposto, ma vorrei aggiungere un po 'di più sull'argomento e diversi modi per farlo a seconda del tuo caso d'uso.

È possibile aggiungere adjustsFontSizeToFit={true}(attualmente non documentato) a TextComponente per regolare automaticamente le dimensioni all'interno di un nodo padre.

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

È inoltre possibile aggiungere quanto segue nel componente di testo:

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

Oppure puoi aggiungere quanto segue nel genitore del componente Testo:

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

o entrambi

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

o tutti e tre

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

Tutto dipende da cosa stai facendo. Puoi anche controllare il mio post sul blog completo sull'argomento

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


questo dovrebbe essere previsto: <Text style = {{textAlignVertical: "center", textAlign: "center",}}> Hiiiz </Text>
— Tushar Pandey

amico, mi hai risparmiato 1,5 ore. Stavo cercando di fare lo stesso ma non ci sono riuscito fino a questa risposta come:, textAlignVertical: "center", textAlign: "center" come <Text /> Component Style.
— ganeshdeshmukh

textAlignVertical è solo Android. Nessuna di queste soluzioni sta allineando il mio testo in verticale, solo in orizzontale.
— sudo,

14

Imposta questi stili sul componente immagine: {textAlignVertical: "center", textAlign: "center"}



9

questo è un esempio di allineamento orizzontale e verticale simultaneamente

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

Grazie per il suggerimento che gli stili incorporati devono essere racchiusi tra {{parentesi graffe}}.
— MarkHu,

6

Allineamento centrale orizzontale e verticale

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

L'unica soluzione che ha funzionato per me in termini di centraggio di <Testo> all'interno di un <Vista> non solo in orizzontale, ma anche in verticale. Grazie!
— RuntimeError

4

È possibile utilizzare la alignSelfproprietà sul componente Testo

{ alignSelf : "center" }

4

Ovunque tu abbia un Textcomponente nella tua pagina, devi solo impostare lo stile del Textcomponente.

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

non è necessario aggiungere altre proprietà di stile, questa è magia spettacolare che ti metterà il testo al centro dell'interfaccia utente.


2

Aggiungi semplice

textAlign: "center"

nel tuo foglio di stile, tutto qui. Spero che questo possa aiutare.

modifica: "centro"


2

È possibile utilizzare la seguente proprietà: {{alignItems: 'center'}}

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

1
Anche se questa potrebbe essere la soluzione alla domanda, ti preghiamo di aggiungere qualche spiegazione in più in modo che tutti possiamo imparare.
— harmonica141

Per favore, miglioralo perché stai usando due asterischi per far circolare la correzione principale ma non è chiaro e l'altra parte è confusa
— Frederiko Cesar


2

Impostato nella vista padre

justifyContent:center

e nella vista figlio alignSelf: center


Le chiavi dovrebbero essere in custodia di cammello justifyContentealignSelf
— Siddharth il

1

Oltre ai casi d'uso citati nelle altre risposte:

Per centrare il testo nel caso d'uso specifico di BottomTabNavigator , ricorda di impostare showIcon su false (anche se non hai icone in TabNavigator). Altrimenti il ​​testo verrà spinto verso la parte inferiore della scheda.

Per esempio:

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

prima aggiungi nella vista padre flex: 1, justifyContent: 'center', alignItems: 'center'

quindi nel testo aggiungi textAlign: 'center'

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.