在React Native中添加全屏幕背景图片的最佳方式是什么?
我想添加一个全屏图像到视图,所以我写这个代码
return ( <View style={styles.container}> <Image source={require('image!egg')} style={styles.backgroundImage}> </View> )
并将其定义为
var styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', flexDirection: 'column', }, backgroundImage:{ width:320, height:480, } ...
但这样我怎么才能find真正的iPhone屏幕大小?
我已经看到一个API来访问像素密度,但没有关于屏幕尺寸…
任何想法?
您可以在<Image>
元素上使用flex: 1
样式来填充整个屏幕。 然后,您可以使用图像大小调整模式之一来让图像完全填充该元素:
<Image source={require('image!egg')} style={styles.backgroundImage} />
样式:
import React from 'react-native'; let { StyleSheet } = React; let styles = StyleSheet.create({ backgroundImage: { flex: 1, resizeMode: 'cover', // or 'stretch' } });
我敢肯定你可以摆脱包装你的形象的<View>
,这将工作。
这是我做到的。 主要的交易是摆脱静态固定大小。
class ReactStrap extends React.Component { render() { return ( <Image source={require('image!background')} style={styles.container}> ... Your Content ... </Image> ); } } var styles = StyleSheet.create({ container: { flex: 1, // remove width and height to override fixed static size width: null, height: null, } };
试试这个解决scheme 这是正式支持。 我刚刚testing它,并完美地运作。
var styles = StyleSheet.create({ backgroundImage: { flex: 1, alignSelf: 'stretch', width: null, } });
至于使用它作为背景图像,只要做到以下几点。
<Image style={styles.backgroundImage}> <View> <Text>All your stuff</Text> </View> </Image>
我尝试了几个这些答案无济于事的android使用react-native版本= 0.19.0。
出于某种原因,我的样式表里面的resizeMode不能正常工作? 但是,当sytlesheet了
backgroundImage: { flex: 1, width: null, height: null, }
并在Image标签中指定了resizeMode:
<Image source={require('path/to/image.png')} style= {styles.backgroundImage} resizeMode={Image.resizeMode.sretch}>
它完美的工作! 如上所述,您可以使用Image.resizeMode.cover或包含。
希望这可以帮助!
根据Braden Rockwell Napier的回答 ,我制作了这个BackgroundImage
组件
BackgroundImage.js
import React, { Component } from 'react' import { Image } from 'react-native' class BackgroundImage extends Component { render() { const {source, children, style, ...props} = this.props return ( <Image source={ source } style={ { flex: 1, width: null, height: null, ...style } } {...props}> { children } </Image> ) } } BackgroundImage.propTypes = { source: React.PropTypes.object, children: React.PropTypes.object, style: React.PropTypes.object } export default BackgroundImage
someWhereInMyApp.js
import BackgroundImage from './backgroundImage' .... <BackgroundImage source={ { uri: "https://facebook.github.io/react-native/img/header_logo.png" } }> <Text>Test</Text> </BackgroundImage>
如果您想将其用作背景图片,则需要使用<ImageBackground>
2017年6月底推出的新的<ImageBackground>
组件。 它支持嵌套,而<Image>
很快就不会。
这是提交摘要:
我们正在取消对组件内嵌套视图的支持。 我们决定这样做是因为具有这个特性使得支持
<Image>
intrinsinc content size
是不可能的; 所以当转换过程完成时,不需要明确指定图像大小,可以从实际图像位图中推断。这是#0步骤。
是非常简单的插入式replace,它通过非常简单的样式来实现这个function。 请使用,而不是如果你想放进去的东西。
您需要确保您的图像resizeMode = {Image.resizeMode.contain}或{Image.resizeMode.stretch}并将图像样式宽度设置为null
<Image source={CharacterImage} style={{width: null,}} resizeMode={Image.resizeMode.contain}/>
从0.14开始,这个方法将不起作用,所以我build立了一个静态组件,这个组件对于你们来说很简单。 您可以将其粘贴或引用为组件。
这应该是可重用的,它将允许您添加额外的样式和属性,如果它是一个标准的<Image />
组件
const BackgroundImage = ({ source, children, style, ...props }) => { return ( <Image source={source} style={{flex: 1, width: null, height: null, ...style}} {...props}> {children} </Image> ); }
只要将其粘贴,然后就可以像图片一样使用它,它应该适合它所在视图的整个尺寸(所以如果它是顶视图,它将填满你的屏幕。
<BackgroundImage source={require('../../assets/backgrounds/palms.jpg')}> <Scene styles={styles} {...store} /> </BackgroundImage>
点击这里预览图像
值为null的宽度和高度不适用于我,然后我认为使用顶部,底部,左侧和右侧的位置,它的工作。 例:
bg: { position: 'absolute', top: 0, bottom: 0, left: 0, right: 0, resizeMode: 'stretch', },
和JSX:
<Image style={styles.bg} source={{uri: 'IMAGE URI'}} />
如果你还没有解决它,React Native v.0.42.0有resizeMode
<Image style={{resizeMode: 'contain'}} source={require('..img.png')} />
import React, { Component } from 'react'; import { Image, StyleSheet } from 'react-native'; export default class App extends Component { render() { return ( <Image source={{uri: 'http://i.imgur.com/IGlBYaC.jpg'}} style={s.backgroundImage} /> ); } } const s = StyleSheet.create({ backgroundImage: { flex: 1, width: null, height: null, } });
你可以试试: https : //sketch.expo.io/B1EAShDie (来自: github.com/Dorian/sketch-reactive-native-apps )
文档: https : //facebook.github.io/react-native/docs/images.html#background-image-via-nesting
你也可以使用你的图像作为容器:
render() { return ( <Image source={require('.http://img.dovov.combackground.png')} style={styles.container}> <Text> This text will be on top of the image </Text> </Image> ); } const styles = StyleSheet.create({ container: { flex: 1, width: undefined, height: undefined, justifyContent: 'center', alignItems: 'center', }, });
另一个简单的解决scheme
<Image source={require('../assets/background.png')} style={{position: 'absolute', zIndex: -1}}/> <View style={{flex: 1, position: 'absolute'}}> {/*rest of your content*/} </View>
我听说过必须使用BackgroundImage,因为将来你应该不能嵌套Image标签。 但我无法得到BackgroudImage来正确显示我的背景。 我所做的是将我的图像embedded到视图标记中,并且对外部视图以及图像进行样式设置。 键将宽度设置为空,并将resizeMode设置为“拉伸”。 以下是我的代码:
import React, {Component} from 'react'; import { View, Text, StyleSheet, Image} from 'react-native'; export default class BasicImage extends Component { constructor(props) { super(props); this.state = {}; } render() { return ( <View style={styles.container}> <Image source={this.props.source} style={styles.backgroundImage} /> </View> ) } } const styles = StyleSheet.create({ container: { flex: 1, width: null, height: null, marginBottom: 50 }, text: { marginLeft: 5, marginTop: 22, fontFamily: 'fontawesome', color: 'black', fontSize: 25, backgroundColor: 'rgba(0,0,0,0)', }, backgroundImage: { flex: 1, width: null, height: null, resizeMode: 'stretch', } });
像antoine129所说的那样使用<ImageBackground>
。 对孩子使用<Image>
现在不推荐使用。
class AwesomeClass extends React.Component { render() { return ( <ImageBackground source={require('image!background')} style={styles.container}> <YourAwesomeComponent/> </ImageBackground> ); } } var styles = StyleSheet.create({ container: { flex: 1, } };
截至10月17日的最新情况 (RN> = .46 )
import React from 'react'; import { ... ImageBackground, } from 'react-native'; render() { return ( <ImageBackground source={require('path/to/img')} style={styles.urStyle}> </ImageBackground> ); }
http://facebook.github.io/react-native/releases/0.49/docs/images.html#background-image-via-nesting