React Native app

时间:2016-01-25 12:02:02

标签: background-image fullscreen react-native

我尝试在登录视图中设置完整的背景图片。

我在Stackoverflow中找到了这个问题:What's the best way to add a full screen background image in React Native

所以我就像那样做了,但它没有工作:

enter image description here

var login = React.createClass({
  render: function() {
    return (
      <View style={ styles.container }>
        <Image source={require('../images/login_background.png')} style={styles.backgroundImage} />
        <View style={ styles.loginForm }>
          <Text>TEST</Text>
        </View>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
  },

  backgroundImage: {
    flex: 1,
    resizeMode: 'cover', // or 'stretch'
  },

  loginForm: {
  },
});

我不知道自己做错了什么。任何帮助将不胜感激。

编辑:这是应用,如果你们想看一看 - &gt; Full size background image example on rnplay.org。我不知道如何编辑它:/

谢谢:)

5 个答案:

答案 0 :(得分:9)

尝试以下两种方法之一:

第一个与您的相似,只是您的登录表单上有position: 'absolute'

var styles = StyleSheet.create({
    container: {
        flex: 1,
    },
    backgroundImage: {
        flex: 1,
        resizeMode: 'cover', // or 'stretch'
    },
    loginForm: {
        position: 'absolute',
        top: 0,
        bottom: 0,
        left: 0,
        right: 0
    },
});

第二种方法涉及将ImageView用作容器:

render: function() {
    return (
        <View style={ styles.container }>
            <Image source={require('../images/login_background.png')} style={styles.backgroundImage}>
                <View style={ styles.loginForm }>
                    <Text>TEST</Text>
                </View>
            </Image>
        </View>
    );
}

答案 1 :(得分:4)

您应该使用ImageBackground组件。 See React Native Docs

<ImageBackground source={...} style={{width: '100%', height: '100%'}}>
    <Text>Inside</Text>
</ImageBackground>

答案 2 :(得分:2)

我犯了一个愚蠢的错误......

文字组件有白色背景,我认为问题出在图片和其他内容......

因此,解决方案是将信息包装在 Image 标记内,如@Cherniv和@kamikazeOvrld所说,但也为其中的组件设置了透明背景。

以下是完整的工作示例:

enter image description here

代码:

'use strict';

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

StatusBarIOS.setHidden(true);

var SampleApp = React.createClass({
  render: function() {
    return (
      <View style={ styles.container }>
        <Image source={{uri: 'http://puu.sh/mJ1ZP/6f167c37e5.png'}} style={styles.backgroundImage} >
          <View style={ styles.loginForm }>
            <Text style={ styles.text }>Some text</Text>
          </View>
        </Image>
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
  },

  backgroundImage: {
    flex: 1,
    resizeMode: 'cover', // or 'stretch',
    justifyContent: 'center',
  },

  loginForm: {
    backgroundColor: 'transparent',
    alignItems: 'center',
  },

  text: {
    fontSize: 30,
    fontWeight: 'bold',
  }
});

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

同样在rnplay.org

我希望它可以帮到像我这样的人,当你整天编写代码时,你的大脑不能像你想的那样工作!

感谢。

答案 3 :(得分:1)

嗯,您的问题的答案已经清楚地说明了。

<Image />组件不包含任何子组件。您需要做的是使用<ImageBackground />组件,因为这将允许您将其他组件嵌入其中,从而使其成为子组件。所以在您的情况下,您应该这样做

<ImageBackground> <Text>Write your text and some other stuffs here...</Text> </ImageBackground>

注意:请不要忘记添加flex: 1 or width

我希望我的回答足够清楚。 谢谢。

答案 4 :(得分:0)

 <View style={styles.imageCancel}>
         <TouchableOpacity onPress={() => { this.setModalVisible(!this.state.visible) }}>
                 <Text style={styles.textCancel} >Close</Text>
          </TouchableOpacity>
    </View>
const styles = StyleSheet.create({
 imageCancel: {
         height: 'auto',
         width: 'auto',
         justifyContent:'center',
         backgroundColor: '#000000',
         alignItems: 'flex-end',
    },
     textCancel: {
        paddingTop:25,
        paddingRight:25,
        fontSize : 18,
        color : "#ffffff",
        height: 50,
        },
 }};

enter image description here