Expo

Get Started
Guides

Styling a React Native button

React Native exports a <Button /> component that exposes the native button element for Android, iOS, and the web. The <Button /> component accepts title and onPress props but it does not accept a style prop, which makes it hard to customize the style. The closest we can get to styling a <Button /> exported from React Native is with the color prop. Below is an example of two buttons on Android, iOS, and the web. The first button is the default <Button /> and the second is another default <Button /> with its color prop set to `"red".
default-button
To create a button with a custom style, we can to turn to the <Pressable /> component.<Pressable />let's us fully customize the appearance of a pressable element (like a button), in addition to allowing us to customize it's behavior. Here's an example of using<Pressable /> to create a button component:
import React from 'react';
import { Text, View, StyleSheet, Pressable } from 'react-native';

export default function Button(props) {
  const { onPress, title = 'Save' } = props;
  return (
    <Pressable style={styles.button} onPress={onPress}>
      <Text style={styles.text}>{title}</Text>
    </Pressable>
  );
}

const styles = StyleSheet.create({
  button: {
    alignItems: 'center',
    justifyContent: 'center',
    paddingVertical: 12,
    paddingHorizontal: 32,
    borderRadius: 4,
    elevation: 3,
    backgroundColor: 'black',
  },
  text: {
    fontSize: 16,
    lineHeight: 21,
    fontWeight: 'bold',
    letterSpacing: 0.25,
    color: 'white',
  },
});
And here's the result of this code:
Custom styled button component using Pressable
React Native's <Button /> component does not accept a style prop, and its color prop is limited and appears differently across Android, iOS, and the web. With the <Pressable /> component, we can create custom buttons that fit our app's design. Those styles will also be the same across Android, iOS, and the web, which will give our apps a consistent look on every platform.
  • Ask a question on the forums
  • Edit this page