ReactNative: как центрировать текст?


212

Как центрировать текст в ReactNative как по горизонтали, так и по вертикали?

У меня есть пример приложения в rnplay.org, где justifyContent = "center" и alignItems = "center" не работает: https://rnplay.org/apps/AoxNKQ

Текст должен быть в центре. И почему между текстом (желтым) и родительским контейнером есть поле сверху?

Код:

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


это не по горизонтали
— itinance

1
хорошо, так это: rnplay.org/apps/1hbnSA , обновлено
— Чернов

WAAAA ... textAlign? я знал, что это будет что-то действительно глупое .... вы должны опубликовать это как ответ
— itinance

Ответы:


356

От headline"стиль удалить height, justifyContentи alignItems. Это будет центрировать текст по вертикали. Добавьте, textAlign: 'center'и текст будет центрирован по горизонтали.

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

16
Не работает с, widthесли вы не оберните его <View>сjustifyContent: 'center', alignItems: 'center',
— Ryan Walker

59

Уже ответил, но я хотел бы добавить немного больше по теме и различные способы сделать это в зависимости от вашего варианта использования.

Вы можете добавить adjustsFontSizeToFit={true}(в настоящее время недокументированное) в TextКомпонент, чтобы автоматически настроить размер внутри родительского узла.

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

Вы также можете добавить следующее в ваш текстовый компонент:

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

Или вы можете добавить следующее в родительский элемент компонента Text:

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

или оба

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

или все три

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

Все зависит от того, что вы делаете. Вы также можете проверить мой полный блог в теме

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


этого следует ожидать: <Text style = {{textAlignVertical: "center", textAlign: "center",}}> Hiiiz </ Text>
— Tushar Pandey

человек ты спас мне 1,5 часа. Я пытался сделать то же самое, но не смог до этого ответа как:, textAlignVertical: "center", textAlign: "center" как <Text /> Component Style.
— Ганешдешмух

textAlignVertical - только для Android. Ни одно из этих решений не выравнивает мой текст по вертикали, только по горизонтали.
— SUDO

14

Установите эти стили для компонента изображения: {textAlignVertical: "center", textAlign: "center"}



9

это пример горизонтального и вертикального выравнивания одновременно

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

Спасибо за подсказку, что встроенные стили должны быть заключены в {{двойные фигурные скобки}}.
— MarkHu

6

Горизонтальное и вертикальное выравнивание по центру

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

Единственное решение, которое работало для меня с точки зрения центрирования <Text> внутри <View> не только по горизонтали, но и по вертикали. Спасибо!
— RuntimeError


4

Везде, где у вас есть Textкомпонент на вашей странице, вам просто нужно установить стиль Textкомпонента.

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

вам не нужно добавлять какие-либо другие свойства стилей, это захватывающая магия, она установит текст в центре вашего интерфейса.


2

Просто добавить

textAlign: "center"

в вашей таблице стилей, вот и все. Надеюсь, это поможет.

редактировать: "центр"


2

Следующее свойство может быть использовано: {{alignItems: 'center'}}

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

1
Даже если это может быть решением вопроса, пожалуйста, добавьте еще несколько объяснений, чтобы мы все могли учиться.
— harmonica141

Пожалуйста, улучшите его, потому что вы используете две звездочки для распространения основной коррекции, но это не ясно, а другая часть
— Фредерико Сезар


2

Установить в родительском представлении

justifyContent:center

и в дочернем представлении alignSelf: center


Ключи должны быть в случае верблюда justifyContentиalignSelf
— Сиддхарт

1

В дополнение к случаям использования, упомянутым в других ответах:

Чтобы центрировать текст в конкретном случае использования BottomTabNavigator , не забудьте установить для showIcon значение false (даже если у вас нет значков в TabNavigator). В противном случае текст будет сдвинут к нижней части Tab.

Например:

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

сначала добавьте в родительском представлении flex: 1, justifyContent: 'center', alignItems: 'center'

затем в тексте добавьте textAlign: 'center'

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.