ReactNative: ¿cómo centrar el texto?

212

¿Cómo centrar el texto en ReactNative tanto en horizontal como en vertical?

Tengo una aplicación de ejemplo en rnplay.org donde justifyContent = "center" y alignItems = "center" no funciona: https://rnplay.org/apps/AoxNKQ

El texto debe estar centrado. ¿Y por qué hay un margen en la parte superior entre el texto (amarillo) y el contenedor principal?

Código:

'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;
itinerario
fuente
¿Te gusta esto: rnplay.org/apps/1hbnSA ?
Cherniv
esto no es horizontal centrado
itinance
1
ok, entonces esto: rnplay.org/apps/1hbnSA , actualizado
Cherniv
WAAAA ... textAlign? sabía que sería algo realmente estúpido .... usted debe publicar esto como una respuesta
itinance

Respuestas:

356

Desde headline'estilo eliminar height, justifyContenty alignItems. Centrará el texto verticalmente. Agregue textAlign: 'center'y centrará el texto horizontalmente.

  headline: {
    textAlign: 'center', // <-- the magic
    fontWeight: 'bold',
    fontSize: 18,
    marginTop: 0,
    width: 200,
    backgroundColor: 'yellow',
  }
Cherniv
fuente
16
No funciona con un a widthmenos que lo envuelva <View>con unjustifyContent: 'center', alignItems: 'center',
Ryan Walker
59

Ya respondí, pero me gustaría agregar un poco más sobre el tema y diferentes formas de hacerlo dependiendo de su caso de uso.

Puede agregar adjustsFontSizeToFit={true}(actualmente no documentado) a TextComponente para ajustar automáticamente el tamaño dentro de un nodo primario.

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

También puede agregar lo siguiente en su componente de texto:

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

O puede agregar lo siguiente en el elemento primario del componente Texto:

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

o ambos

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

o los tres

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

Todo depende de lo que estés haciendo. También puede consultar mi publicación de blog completa sobre el tema

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

garrettmac
fuente
esto debería esperarse: <Text style = {{textAlignVertical: "center", textAlign: "center",}}> Hiiiz </Text>
Tushar Pandey
hombre, salvaste mis 1.5 horas. Estaba tratando de hacer lo mismo, pero no pude hasta que esta respuesta fue como:, textAlignVertical: "center", textAlign: "center" como <Text /> Component Style.
Ganeshdeshmukh
textAlignVertical es solo para Android. Ninguna de estas soluciones está alineando mi texto verticalmente, solo horizontalmente.
sudo
14

Establezca estos estilos en el componente de imagen: {textAlignVertical: "center", textAlign: "center"}

mocanSergiu666
fuente
13
textAlignVertical: "center"

Es la verdadera magia.

Muzammil
fuente
9

Este es un ejemplo de alineación horizontal y vertical simultáneamente

<View style={{width: 200, flexDirection: 'row',alignItems: 'center'}}>
     <Text style={{width: '100%',textAlign: 'center'}} />
</View>
Bashirpour
fuente
Gracias por la sugerencia de que los estilos en línea deben encerrarse entre {{double-curly-braces}}.
MarkHu
6

Alineación central horizontal y vertical

<View style={{flex: 1, justifyContent: 'center',alignItems: 'center'}}>
     <Text> Example Test </Text>
</View>
Bashirpour
fuente
La única solución que funcionó para mí en términos de centrar <Texto> dentro de un <Ver> no solo horizontalmente, sino también verticalmente. ¡Gracias!
RuntimeError
4

Puede usar la alignSelfpropiedad en el componente de texto

{ alignSelf : "center" }
Meenu Negi
fuente
4

Donde sea que tenga un Textcomponente en su página, solo necesita establecer el estilo del Textcomponente.

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

no necesita agregar ninguna otra propiedad de estilo, esta es una magia espectacular que le colocará el texto en el centro de su interfaz de usuario.

Hardik Virani
fuente
2

Añadir simple

textAlign: "center"

en su hoja de estilo, eso es todo. Espero que esto ayude.

editar: "centro"

Raghib Arshi
fuente
2

Se puede usar la siguiente propiedad: {{alignItems: 'center'}}

<View style={{alignItems: 'center'}}>
 <Text>Hello im centered text{this.props.name}!</Text>
</View>
Omar bakhsh
fuente
1
Incluso si esta puede ser la solución a la pregunta, agregue más explicaciones para que todos podamos aprender.
armónica141
Por favor, mejórelo porque está usando dos asteriscos para hacer circular la corrección principal, pero no está claro y la otra parte es confusa
Frederiko Cesar
2

usado

textalign: center

a la vista

Sanjib Suna
fuente
2

Establecer en vista principal

justifyContent:center

y en vista infantil alignSelf: center

Sanson Jib
fuente
Las llaves deben estar en estuche de camellos justifyContentyalignSelf
Siddharth
1

Además de los casos de uso mencionados en las otras respuestas:

Para centrar el texto en el caso de uso específico de un BottomTabNavigator , recuerde establecer showIcon en falso (incluso si no tiene iconos en el TabNavigator). De lo contrario, el texto se empujará hacia la parte inferior de la pestaña.

Por ejemplo:

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"
    }
  }
Gunnar Karlsson
fuente
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>
    )

}
Giang
fuente
0

primero agregue en la vista principal flex: 1, justifyContent: 'center', alignItems: 'center'

luego, en el texto, agregue textAlign: 'center'


fuente