itinance
itinance

Reputation: 12428

ReactNative: how to center text?

How to center Text in ReactNative both in horizontal and vertical?

I have an example application in rnplay.org where justifyContent="center" and alignItems="center" is not working: https://rnplay.org/apps/AoxNKQ

The text should being centered. And why is there a margin at the top between the text (yellow) and parent container?

Code:

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

Upvotes: 347

Views: 530325

Answers (22)

Rob Johansen
Rob Johansen

Reputation: 5164

If you're running into this issue on Android, like I was, make sure to set includeFontPadding to false (documentation).

Upvotes: 2

mocansergiu666
mocansergiu666

Reputation: 327

Set these styles on the image component:

{
  textAlignVertical: "center",
  textAlign: "center"
}

Upvotes: 25

Antier Solutions
Antier Solutions

Reputation: 1402

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

Upvotes: 12

Anujfresco Fresco
Anujfresco Fresco

Reputation: 91

<View style={{alignSelf:'center'}}>
<Text>React Native</Text>
</View>

Upvotes: -1

ocodo
ocodo

Reputation: 30319

In many instances, ReactNative supports CSS style properties, names as camelCase instead of the standard CSS dasherized-lisp-style (aka kebab-case)

Which is the same as React/JSX.

The CSS property text-align has the direct equivalent: textAlign

So usually, it's worth trying the CSS property, converted to camelCase.

Upvotes: 0

Gprakash
Gprakash

Reputation: 28

headline: { textAlign: 'center',fontWeight: 'bold'}

Upvotes: -2

Omar bakhsh
Omar bakhsh

Reputation: 1062

The following property can be used: {{alignItems: 'center'}} becaus you are using item <Text> not "string".

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

Upvotes: 10

Shahmeer Khan
Shahmeer Khan

Reputation: 160

Okey , so its a basic problem , dont worry about this just write the <View> component and wrap it around the <Text> component

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

alignitems:center is a prop use to center items on crossaxis


justifycontent:'center' is a prop use to center items on mainaxis

Upvotes: 4

shubham sharma
shubham sharma

Reputation: 1

You can use two approaches for this...

  1. To make text align center horizontally, apply this Property (textAlign:"center"). Now to make the text align vertically, first check direction of flex. If flexDirection is column apply property (justifyContent:"center") and if flexDirection is row is row apply property (alignItems : "center") .

  2. To Make text align center apply same property (textAlign:"center"). Now to make it align vertically make the hieght of the <Text> </Text> equal to view and then apply property (textAlignVertical: "center")...

Most Probably it will Work...

Upvotes: 0

user13784315
user13784315

Reputation:

Set in Parent view

justifyContent:center

and in child view alignSelf:center

Upvotes: 3

Sanjib Suna
Sanjib Suna

Reputation: 284

used

textalign:center

at the view

Upvotes: 1

user11716837
user11716837

Reputation:

first add in parent view flex:1, justifyContent: 'center', alignItems: 'center'

then in text add textAlign:'center'

Upvotes: 1

Raghib Arshi
Raghib Arshi

Reputation: 765

Simple add

textAlign: "center"

in your styleSheet, that's it. Hope this would help.

edit: "center"

Upvotes: 5

Hardik Virani
Hardik Virani

Reputation: 1755

Wherever you have Text component in your page just you need to set style of the Text component.

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

you don't need to add any other styling property, this is spectacular magic it will set you text in center of the your UI.

Upvotes: 5

garrettmac
garrettmac

Reputation: 8585

Already answered but I'd like to add a bit more on the topic and different ways to do it depending on your use case.

You can add adjustsFontSizeToFit={true} (currently undocumented) to Text Component to auto adjust the size inside a parent node.

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

You can also add the following in your Text Component:

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

Or you can add the following into the parent of the Text component:

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

or both

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

or all three

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

It all depends on what you're doing. You can also checkout my full blog post on the topic

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

Upvotes: 99

Gunnar Karlsson
Gunnar Karlsson

Reputation: 28480

In addition to the use cases mentioned in the other answers:

To center text in the specific use case of a BottomTabNavigator, remember to set showIcon to false (even if you don't have icons in the TabNavigator). Otherwise the text will be pushed toward bottom of Tab.

For example:

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

Upvotes: 1

Meenu Negi
Meenu Negi

Reputation: 113

You can use alignSelf property on Text component

{ alignSelf : "center" }

Upvotes: 8

Mahdi Bashirpour
Mahdi Bashirpour

Reputation: 18883

Horizontal and Vertical center alignment

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

Upvotes: 14

Muzammil
Muzammil

Reputation: 1539

textAlignVertical: "center"

is the real magic.

Upvotes: 19

Mahdi Bashirpour
Mahdi Bashirpour

Reputation: 18883

this is a example for Horizontal and Vertical alignment simultaneously

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

Upvotes: 11

Giang
Giang

Reputation: 3655

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>
    )

}

Upvotes: 1

Ivan Chernykh
Ivan Chernykh

Reputation: 42196

From headline' style remove height, justifyContent and alignItems. It will center the text vertically. Add textAlign: 'center' and it will center the text horizontally.

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

Upvotes: 533

Related Questions