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.