Reputation: 12428
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
Reputation: 5164
If you're running into this issue on Android, like I was, make sure to set includeFontPadding
to false
(documentation).
Upvotes: 2
Reputation: 327
Set these styles on the image component:
{
textAlignVertical: "center",
textAlign: "center"
}
Upvotes: 25
Reputation: 1402
<View style={{ backgroundColor: 'blue', justifyContent: 'center' }}>
<Text style={{ fontSize: 25, textAlign: 'center' }}>A</Text>
</View>
Upvotes: 12
Reputation: 91
<View style={{alignSelf:'center'}}>
<Text>React Native</Text>
</View>
Upvotes: -1
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
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
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
Reputation: 1
You can use two approaches for this...
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"
) .
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
Reputation:
Set in Parent view
justifyContent:center
and in child view alignSelf:center
Upvotes: 3
Reputation:
first add in parent view flex:1, justifyContent: 'center', alignItems: 'center'
then in text add textAlign:'center'
Upvotes: 1
Reputation: 765
Simple add
textAlign: "center"
in your styleSheet, that's it. Hope this would help.
edit: "center"
Upvotes: 5
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
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
Upvotes: 99
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
Reputation: 113
You can use alignSelf
property on Text component
{ alignSelf : "center" }
Upvotes: 8
Reputation: 18883
Horizontal and Vertical center alignment
<View style={{flex: 1, justifyContent: 'center',alignItems: 'center'}}>
<Text> Example Test </Text>
</View>
Upvotes: 14
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
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
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