Harreke
Harreke

Reputation: 123

How to achieve 'FrameLayout' component in React Native?

I know there is a 'View' component in React Native that acts like Android VieGroup, how ever it is more likely to work as LinearLayout - childrens are arranged in rows or columns.

I am wondering how to achieve 'FrameLayout' behavior - childrens are stacked in the layout, and each child can be assigned an unique gravity location.

For example: Put 5 childs into a component, each one of 4 childs are aligned to each corner of the layout, and the last child are aligned to center of the layout.

How to write React Native 'render' function?

Upvotes: 9

Views: 5866

Answers (2)

Rajesh N
Rajesh N

Reputation: 6683

You can do overlay this way import React, { Component } from "react"; import { Animated, View, StyleSheet, Easing, Text } from "react-native";

class A extends Component {
  constructor(props) {
    super(props);
    this.animatedValue = new Animated.Value(0);
  }

  handleAnimation = () => {
    Animated.timing(this.animatedValue, {
      toValue: 1,
      duration: 500,
      easing: Easing.ease
    }).start();
  };

  render() {
    return (
      <View style={styles.container}>

        <View style={styles.layer1} />
        <View style={styles.overLay}>
          <Text>This is an overlay area</Text>
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1
  },
  layer1: {
    height:100,
    backgroundColor: "lightgreen",

  },
  overLay: {
    height: 100,
    width: "100%",
    backgroundColor: "#00000070",
    position: "absolute",

  }
});

export default A;

Upvotes: 0

agenthunt
agenthunt

Reputation: 8678

That can be done using position: 'absolute' and align it top,left,right,bottom properties. Here is an working sample

'use strict';

var React = require('react-native');
var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
} = React;

var SampleApp = React.createClass({
  render: function() {
    return (
      <View style={styles.container}>
                <Text style={styles.topLeft}> Top-Left</Text>
                <Text style={styles.topRight}> Top-Right</Text>
        <Text>Center</Text>
        <Text style={styles.bottomLeft}> Bottom-Left</Text>
        <Text style={styles.bottomRight}> Bottom-Right</Text>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
    marginTop: 24
  },
  topLeft:{
    position: 'absolute',
    left: 0,
    top: 0
  },
    topRight:{
    position: 'absolute',
    right: 0,
    top: 0
  },
    bottomLeft:{
    position: 'absolute',
    left: 0,
    bottom: 0
  },
    bottomRight:{
    position: 'absolute',
     right: 0,
    bottom: 0
  }
});

AppRegistry.registerComponent('SampleApp', () => SampleApp);

Also on rnplay, https://rnplay.org/apps/n6JJHg

Upvotes: 10

Related Questions