Bird
Raised Fist0
React Nativemobile~20 mins

Why advanced UI creates polished apps in React Native - Build It to Prove It

Choose your learning style10 modes available
Build: PolishedAppDemo
This screen demonstrates how advanced UI elements make an app look polished and professional by using smooth animations, shadows, and responsive layout.
Target UI
-------------------------
| Polished App Demo      |
|-----------------------|
|                       |
|  [Animated Button]    |
|                       |
|  Shadowed Card View   |
|  -------------------  |
|  | Title           |  |
|  | Description     |  |
|  -------------------  |
|                       |
|  Responsive Layout    |
|  [Text adjusts size]  |
-------------------------
Add a button with a smooth scale animation on press
Create a card view with shadow and rounded corners
Use responsive text that adjusts size based on screen width
Use Flexbox layout for spacing and alignment
Starter Code
React Native
import React from 'react';
import { View, Text, Pressable, StyleSheet, Animated, Dimensions } from 'react-native';

export default function PolishedAppDemo() {
  // TODO: Add animated scale value and handlers

  return (
    <View style={styles.container}>
      {/* TODO: Add animated button here */}

      {/* TODO: Add shadowed card view here */}

      {/* TODO: Add responsive text here */}
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 20,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#f0f0f0'
  }
});
Task 1
Task 2
Task 3
Task 4
Task 5
Solution
React Native
import React, { useRef } from 'react';
import { View, Text, Pressable, StyleSheet, Animated, Dimensions } from 'react-native';

export default function PolishedAppDemo() {
  const scaleAnim = useRef(new Animated.Value(1)).current;
  const screenWidth = Dimensions.get('window').width;

  const onPressIn = () => {
    Animated.spring(scaleAnim, {
      toValue: 0.95,
      useNativeDriver: true
    }).start();
  };

  const onPressOut = () => {
    Animated.spring(scaleAnim, {
      toValue: 1,
      friction: 3,
      useNativeDriver: true
    }).start();
  };

  const responsiveFontSize = screenWidth > 400 ? 24 : 18;

  return (
    <View style={styles.container}>
      <Pressable onPressIn={onPressIn} onPressOut={onPressOut} accessibilityLabel="Animated button">
        <Animated.View style={[styles.button, { transform: [{ scale: scaleAnim }] }]}> 
          <Text style={styles.buttonText}>Animated Button</Text>
        </Animated.View>
      </Pressable>

      <View style={styles.card} accessible accessibilityRole="summary">
        <Text style={styles.cardTitle}>Shadowed Card</Text>
        <Text style={styles.cardDescription}>This card has shadow and rounded corners.</Text>
      </View>

      <Text style={[styles.responsiveText, { fontSize: responsiveFontSize }]}>Responsive Text adjusts size</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 20,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#f0f0f0'
  },
  button: {
    backgroundColor: '#4a90e2',
    paddingVertical: 12,
    paddingHorizontal: 24,
    borderRadius: 8,
    marginBottom: 30
  },
  buttonText: {
    color: 'white',
    fontWeight: '600',
    fontSize: 18,
    textAlign: 'center'
  },
  card: {
    width: '80%',
    backgroundColor: 'white',
    borderRadius: 12,
    padding: 16,
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 4 },
    shadowOpacity: 0.3,
    shadowRadius: 6,
    elevation: 8,
    marginBottom: 30
  },
  cardTitle: {
    fontSize: 20,
    fontWeight: '700',
    marginBottom: 8
  },
  cardDescription: {
    fontSize: 16,
    color: '#555'
  },
  responsiveText: {
    color: '#333',
    fontWeight: '500'
  }
});

This solution uses React Native's Animated API to create a button that smoothly scales down when pressed and returns to normal size when released. This subtle animation makes the button feel responsive and polished.

The card view uses shadows and rounded corners to create depth, making the UI look modern and professional. The shadow properties work on both iOS and Android (with elevation).

The responsive text adjusts its font size based on the screen width, ensuring readability on different device sizes. Flexbox layout centers and spaces the elements nicely.

Accessibility labels and roles are added for screen readers, improving usability for all users.

Final Result
Completed Screen
-------------------------
| Polished App Demo      |
|-----------------------|
|                       |
|  [Animated Button]    |
|                       |
|  Shadowed Card View   |
|  -------------------  |
|  | Shadowed Card   |  |
|  | This card has   |  |
|  | shadow and      |  |
|  | rounded corners.|  |
|  -------------------  |
|                       |
|  Responsive Text      |
|  Responsive Text      |
|  adjusts size         |
-------------------------
When user presses the button, it smoothly shrinks slightly and returns to normal on release
Card view has visible shadow and rounded corners giving a layered look
Text below adjusts size depending on device width for better readability
Stretch Goal
Add a dark mode toggle that switches the background and text colors
💡 Hint
Use React state to toggle a dark mode boolean and conditionally apply styles for background and text colors

Practice

(1/5)
1. Why does adding animations in a React Native app improve user experience?
easy
A. Animations slow down the app and confuse users.
B. Animations are only for decoration and do not affect usability.
C. Animations increase the app size without benefits.
D. Animations make the app feel smoother and more engaging.

Solution

  1. Step 1: Understand the role of animations in UI

    Animations provide visual feedback and smooth transitions that help users understand app behavior.
  2. Step 2: Connect animations to user engagement

    Smoother and engaging animations keep users interested and make the app feel polished.
  3. Final Answer:

    Animations make the app feel smoother and more engaging. -> Option D
  4. Quick Check:

    Animations improve experience = B [OK]
Hint: Animations enhance feel and engagement [OK]
Common Mistakes:
  • Thinking animations slow down the app
  • Believing animations are just decoration
  • Ignoring user engagement benefits
2. Which of the following is the correct way to add a simple button in React Native?
easy
A. alert('Hello')} />
B. alert('Hello')} />
C. alert('Hello')} />
D. alert('Hello')} />

Solution

  1. Step 1: Identify correct React Native button syntax

    React Native uses <Button> with 'title' prop and 'onPress' event.
  2. Step 2: Check each option for correct props and tags

    <Button title='Click me' onPress={() => alert('Hello')} /> uses correct tag and props; others use invalid tags or props.
  3. Final Answer:

    <Button title='Click me' onPress={() => alert('Hello')} /> -> Option A
  4. Quick Check:

    React Native Button = <Button title='Click me' onPress={() => alert('Hello')} /> [OK]
Hint: React Native uses <Button> with title and onPress [OK]
Common Mistakes:
  • Using lowercase <button> instead of <Button>
  • Using 'text' instead of 'title' prop
  • Using 'onClick' instead of 'onPress'
3. What will be the visible result of this React Native code snippet?
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export default function App() {
  return (
    
      Welcome!
    
  );
}

const styles = StyleSheet.create({
  container: { flex: 1, justifyContent: 'center', alignItems: 'center' },
  text: { fontSize: 24, color: 'blue' }
});
medium
A. A blank screen with no text visible
B. A full screen with centered blue text 'Welcome!'
C. An error because styles are not applied correctly
D. A small box with black text 'Welcome!' at top left

Solution

  1. Step 1: Analyze the container style

    The container uses flex:1 to fill screen and centers content vertically and horizontally.
  2. Step 2: Analyze the text style

    The text has font size 24 and blue color, so it will appear large and blue.
  3. Final Answer:

    A full screen with centered blue text 'Welcome!' -> Option B
  4. Quick Check:

    Centered blue text = D [OK]
Hint: flex:1 + center styles = centered content [OK]
Common Mistakes:
  • Assuming text is black by default
  • Thinking styles cause errors
  • Ignoring flexbox centering
4. Identify the error in this React Native code snippet:
import React from 'react';
import { View, Text } from 'react-native';

export default function App() {
  return (
    
      Hello
      World
    
  );
}

const styles = StyleSheet.create({
  container: { flex: 1 }
});
medium
A. The code is correct and will render 'Hello' and 'World'.
B. Multiple <Text> components inside <View> are not allowed.
C. Missing import of StyleSheet causes error.
D. The <View> tag is not closed properly.

Solution

  1. Step 1: Check imports and usage

    The code uses StyleSheet.create but does not import StyleSheet from 'react-native'.
  2. Step 2: Verify JSX structure

    Multiple <Text> inside <View> is allowed and <View> is properly closed.
  3. Final Answer:

    Missing import of StyleSheet causes error. -> Option C
  4. Quick Check:

    Missing StyleSheet import = A [OK]
Hint: Import all used modules like StyleSheet [OK]
Common Mistakes:
  • Thinking multiple <Text> tags are invalid
  • Ignoring missing imports
  • Assuming JSX tags are not closed
5. You want to create a polished React Native app with a button that changes color smoothly when pressed. Which approach best achieves this advanced UI effect?
hard
A. Use TouchableOpacity with animated opacity change on press.
B. Use a simple Button component with no animation.
C. Change button color instantly without animation on press.
D. Use Text component styled as a button without interaction.

Solution

  1. Step 1: Identify how to animate button color on press

    TouchableOpacity supports animated opacity changes, giving smooth visual feedback.
  2. Step 2: Compare options for polished UI

    Simple Button or instant color change lacks smooth animation; Text component lacks interaction.
  3. Final Answer:

    Use TouchableOpacity with animated opacity change on press. -> Option A
  4. Quick Check:

    Animated touch feedback = C [OK]
Hint: TouchableOpacity enables smooth press animations [OK]
Common Mistakes:
  • Using Button without animation
  • Changing color instantly without animation
  • Using Text without interaction
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard