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

Answers:


356

headline'样式删除heightjustifyContentalignItems。它将使文本垂直居中。添加textAlign: 'center',它将使文本水平居中。

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

16
width除非与a一起包装,否则不能与a <View>一起使用justifyContent: 'center', alignItems: 'center',
Ryan Walker

59

已经回答了,但我想在此主题上添加更多内容,并根据您的使用情况以不同的方式进行操作。

您可以adjustsFontSizeToFit={true}TextComponent 添加(当前未记录)以自动调整父节点内的大小。

  <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 />组件样式。
ganeshdeshmukh,

textAlignVertical仅适用于Android。这些解决方案都不能使我的文本垂直对齐,而只能水平对齐。
sudo

14

将这些样式设置为图像组件:{textAlignVertical:“ center”,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在文本组件上使用属性

{ alignSelf : "center" }

4

无论Text页面中何处有组件,您都需要设置Text组件的样式。

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

您无需添加任何其他样式属性,这是一种奇妙的魔力,它将使您在用户界面的中心放置文本。



2

可以使用以下属性: {{alignItems: 'center'}}

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

1
即使这可能是解决问题的方法,也请添加更多说明,以便我们都可以学习。
口琴

请改进它,因为您使用两个星号来散发主要更正,但尚不清楚,而另一部分令人困惑
Frederiko Cesar



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'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.