【问题标题】:ReactNative: how to center text?ReactNative:如何使文本居中?
【发布时间】:2016-09-30 23:37:20
【问题描述】:

如何在 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;

【问题讨论】:

标签: reactjs flexbox react-native


【解决方案1】:

可以使用以下属性:{{alignItems: 'center'}},因为您使用的是项目 &lt;Text&gt; 而不是“字符串”。

<View style={{alignItems: 'center'}}>
 <Text> Hello i'm centered text</Text>
</View>

【讨论】:

  • 即使这可能是问题的解决方案,请添加更多解释,以便我们大家学习。
  • 请改进它,因为您使用两个星号来循环主要更正,但不清楚,另一部分很混乱
【解决方案2】:

                <Text style={{ fontSize: 25, textAlign: 'center' }} >A</Text>    
            </View>

【讨论】:

    【解决方案3】:

    好的,所以这是一个基本问题,不用担心这个 只需编写 View> 组件并将其包裹在 Text> 组件

    <View style={{alignItems: 'center'}}>
    <Text> Write your Text Here</Text>
    </View>
    

    alignitems:center 是用于在横轴上居中项目的道具


    justifycontent:'center' 是用于在主轴上居中项目的道具

    【讨论】:

      【解决方案4】:

      您可以使用两种方法...

      1. 要使文本水平居中对齐,请应用此属性(textAlign:"center")。 现在要使文本垂直对齐,首先检查 flex 的方向。如果 flexDirection 是列应用属性 (justifyContent:"center"),如果 flexDirection 是行是行应用属性 (alignItems : "center")。

      2. 使文本居中对齐应用相同的属性 (textAlign:"center")。现在使其垂直对齐,使&lt;Text&gt; &lt;/Text&gt; 的高度等于视图,然后应用属性 (textAlignVertical: "center")...

      很有可能它会起作用......

      【讨论】:

        【解决方案5】:

        在父视图中设置

        justifyContent:center
        

        在子视图中 alignSelf:center

        【讨论】:

        • 键应该是驼峰式justifyContentalignSelf
        【解决方案6】:

        二手

        文本对齐:居中

        在视图中

        【讨论】:

          【解决方案7】:

          首先在父视图中添加 弹性:1, justifyContent: '中心', alignItems: '居中'

          然后在文本中添加 textAlign:'居中'

          【讨论】:

            【解决方案8】:

            简单添加

            textAlign: "center"
            

            在您的样式表中,就是这样。 希望这会有所帮助。

            编辑:“中心”

            【讨论】:

              【解决方案9】:

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

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

              您无需添加任何其他样式属性,这是一种神奇的魔法,它会将您的文本设置在 UI 的中心。

              【讨论】:

                【解决方案10】:

                已经回答,但我想根据您的用例添加更多关于该主题的内容和不同的方法。

                您可以将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

                【讨论】:

                • 这是意料之中的:Hiiiz
                • 你帮我节省了 1.5 小时。我试图做同样的事情,但直到这个答案成为:textAlignVertical: "center", textAlign: "center" ,作为 组件样式。
                • textAlignVertical 仅适用于 Android。这些解决方案都没有垂直对齐我的文本,只有水平对齐。
                • 父组件中的 justifyContent: "center" 是魔法酱。谢谢!
                【解决方案11】:

                除了其他答案中提到的用例:

                要在 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"
                    }
                  }
                

                【讨论】:

                  【解决方案12】:

                  您可以在 Text 组件上使用 alignSelf 属性

                  { alignSelf : "center" }
                  

                  【讨论】:

                    【解决方案13】:

                    水平垂直居中对齐

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

                    【讨论】:

                    • 唯一对我有用的解决方案是在 中将 居中,不仅水平居中,而且垂直居中。谢谢!
                    【解决方案14】:
                    textAlignVertical: "center"
                    

                    是真正的魔法。

                    【讨论】:

                      【解决方案15】:

                      这是水平垂直同时对齐的示例

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

                      【讨论】:

                      • 感谢内联样式必须包含在 {{double-curly-braces}} 中的提示。
                      【解决方案16】:
                      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>
                          )
                      
                      }
                      

                      【讨论】:

                        【解决方案17】:

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

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

                        【讨论】:

                        • 不适用于width,除非你用justifyContent: 'center', alignItems: 'center',将它包装在&lt;View&gt;
                        • 你的魔法没有奏效,但是 width: "100%", 奏效了
                        • 我只是通过将其更改为“text-Align: center;”来使其工作
                        【解决方案18】:

                        将这些样式设置为图像组件: { textAlignVertical: "居中", 文本对齐:“中心” }

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2015-07-13
                          • 1970-01-01
                          • 2015-04-02
                          • 2014-05-07
                          • 2011-09-24
                          • 2013-10-12
                          • 1970-01-01
                          • 2016-09-06
                          相关资源
                          最近更新 更多