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.