ReactNative: як центрувати текст?


212

Як центрувати текст в ReactNative як в горизонтальному, так і вертикальному напрямку?

У мене є приклад програми на rnplay.org, де justifyContent = "центр" і alignItems = "центр" не працює: 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


цього слід очікувати: <Текст стилю = {{textAlignVertical: "центр", textAlign: "центр",}}> Hiiiz </Text>
— Tushar Pandey

чоловіче, ти врятував мої 1,5 години. Я намагався зробити те саме, але не міг, поки відповідь не отримав як:, textAlignVertical: "center", textAlign: "center" як <Текст /> Стиль компонента.
— Ганешдешмух

textAlignVertical - лише для Android. Жодне з цих рішень не вирівнює мого тексту вертикально, лише горизонтально.
— судо

14

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



9

це приклад для горизонтального та вертикального вирівнювання одночасно

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

Дякуємо за пораду, що стилі вбудованого тексту повинні бути укладені в {{double-curly-braces}}.
— MarkHu

6

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

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

Єдине рішення, яке працювало для мене з точки зору центрування <Text> всередині <View> не тільки по горизонталі, але й по вертикалі. Дякую!
— RuntimeError

4

Ви можете використовувати alignSelfвластивість для компонента Text

{ alignSelf : "center" }

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
Навіть якщо це може бути вирішенням питання, будь ласка, додайте ще трохи пояснень, щоб ми всі могли дізнатися.
— гармоніка141

Будь ласка, вдосконаліть це, оскільки ви використовуєте дві зірочки для розповсюдження основної корекції, але це не ясно, а інша частина
— Фредеріко Сезар


2

Встановити у поданні батьків

justifyContent:center

і в дитячому поданні alignSelf: по центру


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

1

Окрім випадків використання, згаданих в інших відповідях:

Щоб централізувати текст у конкретному випадку використання BottomTabNavigator , не забудьте встановити параметр showIcon на значення false (навіть якщо у вас немає іконок у TabNavigator). Інакше текст буде висунутий внизу вкладки.

Наприклад:

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.