我想在View中添加一个全屏图像,所以我写了这段代码
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,
}
...
但是这样我怎么能找到实际的iPhone屏幕尺寸呢?
我见过一个访问像素密度的API,但没有关于屏幕尺寸......
有什么想法吗?
答案 0 :(得分:168)
(现已弃用此版本,您可以使用ImageBackground)
我就是这样做的。主要协议是摆脱静态固定尺寸。
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,
}
};
答案 1 :(得分:96)
您可以在flex: 1
元素上使用<Image>
样式,使其填满整个屏幕。然后,您可以使用其中一个图像调整大小模式让图像完全填充元素:
<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>
包裹你的形象,这将有效。
答案 2 :(得分:41)
注意:此解决方案已过时。请参阅 https://facebook.github.io/react-native/docs/images.html#background-image-via-nesting
试试这个解决方案。它得到官方支持。我刚刚对它进行了测试,并且完美无缺。
var styles = StyleSheet.create({
backgroundImage: {
flex: 1,
alignSelf: 'stretch',
width: null,
}
});
至于将其用作背景图像,只需执行以下操作即可。
<Image style={styles.backgroundImage}>
<View>
<Text>All your stuff</Text>
</View>
</Image>
答案 3 :(得分:19)
我使用react-native version = 0.19.0尝试了几个这样的答案无法用于android。
由于某种原因,我的样式表中的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或包含。
希望这有帮助!
答案 4 :(得分:12)
基于Braden Rockwell Napier的answer,我制作了此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>
答案 5 :(得分:11)
如果您想将其用作背景图片,则需要在v0.46中使用新的<ImageBackground>
组件introduced at the end of June 2017。它支持嵌套,<Image>
很快就不会。
以下是commit摘要:
我们正在删除组件内嵌套视图的支持。我们决定这样做,因为有这个功能可以提供支持
intrinsinc content size
不可能<Image>
;所以当 转换过程完成后,不需要指定图像 明确地说,它可以从实际的图像位图中推断出来。这是第0步。
是非常简单的直接替换实现的 这个功能通过非常简单的样式。请用 而不是如果你想要放东西 内部。
答案 6 :(得分:8)
<ImageBackground
source={{uri: 'https://images.pexels.com/photos/89432/pexels-photo-89432.jpeg?h=350&dpr=2&auto=compress&cs=tinysrgb'}}
style={{ flex: 1,
width: null,
height: null,
}}
>
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Your Contents</Text>
</View>
</ImageBackground >
答案 7 :(得分:8)
哦,上帝终于找到了React-Native V 0.52-RC和原生基地的好方法:
您的内容标记应该是这样的: // ================================================ ==============
<Content contentContainerStyle={styles.container}>
<ImageBackground
source={require('./../assets/img/back.jpg')}
style={styles.backgroundImage}>
<Text>
Some text here ...
</Text>
</ImageBackground>
</Content>
你的基本风格是: // ================================================ ==============
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center'
},
backgroundImage:{
flex : 1,
width : '100%'
}
这是好朋友......玩得开心
答案 8 :(得分:8)
更新到ImageBackground
由于不建议使用<Image />
作为容器,因此所有答案实际上都遗漏了一些重要内容。为了正确使用,请选择<ImageBackground />
和style
和 imageStyle
道具。将所有与图片相关的样式应用于imageStyle
。
例如:
<ImageBackground
source={yourImage}
style={{
backgroundColor: '#fc0',
width: '100%', // applied to Image
height: '100%'
}}
imageStyle={{
resizeMode: 'contain' // works only here!
}}
>
<Text>Some Content</Text>
</ImageBackground>
https://github.com/facebook/react-native/blob/master/Libraries/Image/ImageBackground.js
答案 9 :(得分:4)
对我来说,这很好用,我使用ImageBackground设置了背景图片:
import React from 'react';
import { SafeAreaView, StyleSheet, ScrollView, View, Text, StatusBar, Image, ImageBackground } from 'react-native';
const App: () => React$Node = () => {
return (
<>
<StatusBar barStyle="dark-content" />
<View style={styles.container}>
<ImageBackground source={require('./Assets.xcassets/AppBackGround.imageset/2x.png')} style={styles.backgroundImage}>
<View style={styles.sectionContainer}>
<Text style={styles.title}>Marketing at the speed of today</Text>
</View>
</ImageBackground>
</View>
</>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
fontFamily: "-apple-system, BlinkMacSystemFont Segoe UI",
justifyContent: "center",
alignItems: "center",
},
backgroundImage: {
flex: 1,
resizeMode: 'cover',
height: '100%',
width: '100%'
},
title:{
color: "#9A9A9A",
fontSize: 24,
justifyContent: "center",
alignItems: "center",
},
sectionContainer: {
marginTop: 32,
paddingHorizontal: 24,
},
});
export default App;
答案 10 :(得分:4)
最新截至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
答案 11 :(得分:3)
由于0.14这个方法不起作用,所以我构建了一个静态组件,这将使你们这么简单。您可以将其粘贴或作为组件引用它。
这应该是可重复使用的,它允许您添加其他样式和属性 - 如果它是标准的<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>
答案 12 :(得分:2)
值为null的宽度和高度对我来说不起作用,然后我想使用顶部,底部,左侧和右侧位置并且它起作用。 例如:
bg: {
position: 'absolute',
top: 0,
bottom: 0,
left: 0,
right: 0,
resizeMode: 'stretch',
},
和JSX:
<Image style={styles.bg} source={{uri: 'IMAGE URI'}} />
答案 13 :(得分:2)
实现背景的最简单方法:
<ImageBackground style={styles.container} source={require('../../images/screen_login.jpg')}>
<View style={styles.logoContainer}>
<Image style={styles.logo}
source={require('../../images/logo.png')}
/>
</View>
<View style={styles.containerTextInput}>
< LoginForm />
</View>
</ImageBackground>
const styles = StyleSheet.create({
container: {
flex: 1,
// backgroundColor:"#0984e3"
},
containerTextInput: {
marginTop: 10,
justifyContent: 'center'
},
logoContainer: {
marginTop: 100,
justifyContent: 'center',
alignItems: 'center'
},
logo: {
height: 150,
width: 150
}
});
答案 14 :(得分:2)
(RN> = .46)
如果要在图像顶部渲染内容,则组件不能包含子项,请考虑使用绝对定位。
或者您可以使用 ImageBackground
import React from 'react';
import {
...
StyleSheet,
ImageBackground,
} from 'react-native';
render() {
return (
<ImageBackground source={require('path/to/img')} style={styles.backgroundImage} >
<View style={{flex: 1, backgroundColor: 'transparent'}} />
<View style={{flex: 3,backgroundColor: 'transparent'}} >
</ImageBackground>
);
}
const styles = StyleSheet.create({
backgroundImage: {
flex: 1,
width: null,
height: null,
resizeMode: 'cover'
},
});
答案 15 :(得分:2)
您需要确保您的Image具有resizeMode = {Image.resizeMode.contain}或{Image.resizeMode.stretch}并将图片样式宽度设置为null
const something = function () {
return 'something';
};
Meteor.methods({
a: something,
b: something
});
答案 16 :(得分:1)
如果要添加背景图像,可以使用来添加背景图像,但首先必须按照以下步骤从“ react-native”导入该图像:
import {ImageBackground} from 'react-native';
然后:
export default function App() {
return (
<View style={styles.body}>
<ImageBackground source={require('./path/to/yourimage')} style={styles.backgroungImage}>
<View style={styles.container}>Hello world!
</View>
</ImageBackground>
</View>
);
}
const styles = StyleSheet.create({
backgroungImage: {
flex: 1,
maxWidth: '100%',
}
});
答案 17 :(得分:1)
import { ImageBackground } from "react-native";
<ImageBackground
style={{width: '100%', height: '100%'}}
source={require('../assets/backgroundLogin.jpg ')}> //path here inside
<Text>React</Text>
</ImageBackground>
答案 18 :(得分:1)
getNewBounds -> item.y, item.x -8.67218887420318 -44.436076836032434
getNewBounds -> item.y, item.x 100.49370734566855 64.7298193838393
getNewBounds -> bounds {
Va: qf {i: -44.436076836032434, j: 64.7298193838393}
Za: uf {i: -8.67218887420318, j: 90}
}
答案 19 :(得分:1)
正如 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,
}
};
答案 20 :(得分:1)
我听说过必须使用BackgroundImage,因为将来你应该无法嵌套Image标签。但我无法让BackgroudImage正确显示我的背景。我所做的是将我的Image嵌入到View标签中,并为外部View和图像设置样式。键将宽度设置为null,并将resizeMode设置为'stretch'。以下是我的代码:
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',
}
});
答案 21 :(得分:1)
您还可以将图片用作容器:
render() {
return (
<Image
source={require('./images/background.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',
},
});
答案 22 :(得分:1)
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
答案 23 :(得分:1)
如果你还没有解决它,React Native v.0.42.0有resizeMode
<Image style={{resizeMode: 'contain'}} source={require('..img.png')} />
答案 24 :(得分:0)
另一个简单的解决方案:
<Image source={require('../assets/background.png')}
style={{position: 'absolute', zIndex: -1}}/>
<View style={{flex: 1, position: 'absolute'}}>
{/*rest of your content*/}
</View>
答案 25 :(得分:0)
我使用此代码解决了我的背景图片问题。
import React from 'react';
import { StyleSheet, Text, View,Alert,ImageBackground } from 'react-native';
import { TextInput,Button,IconButton,Colors,Avatar } from 'react-native-paper';
class SignInScreen extends React.Component {
state = {
UsernameOrEmail : '',
Password : '',
}
render() {
return (
<ImageBackground source={require('../assets/icons/background3.jpg')} style {styles.backgroundImage}>
<Text>React Native App</Text>
</ImageBackground>
);
}
}
export default SignInScreen;
const styles = StyleSheet.create({
backgroundImage: {
flex: 1,
resizeMode: 'cover', // or 'stretch'
}
});
答案 26 :(得分:0)
ImageBackground可能有限制
实际上,您可以直接使用它,并且不建议弃用。
如果您想在React Native中添加背景图像,并且还想在该背景图像上添加其他元素,请按照以下步骤操作:
- 创建容器视图
- 创建宽度和高度为100%的Image元素。还resizeMode:'Cover'
- 在位置为“绝对”的Image元素下创建另一个View元素
这是我使用的代码:
import React, { Component } from 'react';
import {Text, View, Image} from 'react-native';
import Screen from '../library/ScreenSize'
export default class MenuScreen extends Component {
static navigationOptions = {
header: null
}
render() {
return (
<View style={{ flex: 1 }}>
<Image
style={{
resizeMode: "cover",
width: "100%",
height: "100%",
justifyContent: "center",
alignItems: "center",
opacity: 0.4
}}
source={require("../assets/images/menuBackgroundImage.jpg")}
></Image>
<View style={{
width: Screen.width,
height: Screen.height * 0.55,
position: 'absolute',
bottom: 0}}>
<Text style={{
fontSize: 48
}}>Glad to Meet You!</Text>
</View>
</View>
);
}
}
享受编码。...
输出:
答案 27 :(得分:0)
要处理此用例,您可以使用<ImageBackground>
组件,该组件具有与<Image>
相同的道具,并向其中添加您想在其上分层的所有子项。
示例:
return (
<ImageBackground source={...} style={{width: '100%', height: '100%'}}>
<Text>Inside</Text>
</ImageBackground>
);
更多信息:ImageBackground | React Native
请注意,您必须指定一些宽度和高度样式属性。