Was ist der beste Weg, um ein Vollbild-Hintergrundbild in React Native hinzuzufügen

Lesezeit: 5 Minuten

Benutzeravatar von talpaz
Talpaz

Ich wollte der Ansicht ein Vollbildbild hinzufügen, also schreibe ich diesen Code

return (
    <View style={styles.container}>
        <Image source={require('image!egg')}  style={styles.backgroundImage}/>
    </View>
)

und definierte den Stil als

var styles = StyleSheet.create({
container: {
     flex: 1,
     justifyContent: 'center',
     alignItems: 'center',
     backgroundColor: '#F5FCFF',
     flexDirection: 'column',
},
     backgroundImage:{
     width:320,
     height:480,
   }
...

Aber wie soll ich auf diese Weise die tatsächliche iPhone-Bildschirmgröße finden?

Ich habe eine API gesehen, um auf die Pixeldichte zuzugreifen, aber nichts über die Bildschirmgröße …

Irgendeine Idee?

  • Wie sieht es mit der Leistung aus? Ist es in Ordnung zu verwenden .png oder .jpg? Ist es in Ordnung, Hintergrundbilder im App-Verzeichnisbaum zu speichern? Oder ist es besser, etwas anderes zu verwenden? .svg oder irgendwas?

    – Grün

    4. Juli 2018 um 15:57 Uhr

  • @Sabito 錆兎standswithUkraine Das Kriterium von React Native ist für die Frage von zentraler Bedeutung. gehört also in den titel.

    – TylerH

    19. September um 14:34 Uhr

Benutzeravatar von oronbz
oronbz

(Dies ist veraltet, jetzt können Sie es verwenden BildHintergrund)

So habe ich es gemacht. Die Hauptsache war, die statischen festen Größen loszuwerden.

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,
  }
};

  • Ja, so sollte es von Dokumenten gemacht werden facebook.github.io/react-native/docs/…

    – Daniel Steigerwald

    19. Oktober 2015 um 21:47 Uhr

  • Vielen Dank! Stellen Sie sicher, dass Image ist Ihre erste zurückgegebene Komponente, der Container. Zuerst habe ich versehentlich die verschachtelt Image innerhalb eines View das war der behälter.

    – Glavin001

    18. Mai 2016 um 19:50 Uhr


  • Funktioniert das mit facebook.github.io/react-native/docs/tabbarios.html als Inhalt. Funktioniert bei mir nicht, Tabs sind nicht anklickbar

    – divenduz

    29. Oktober 2016 um 19:47 Uhr

  • YellowBox.js:76 Die Verwendung von mit Kindern ist veraltet und wird in naher Zukunft ein Fehler sein. Bitte überdenken Sie das Layout oder verwenden Sie stattdessen . Wenn ich Inhalte zu hinzufüge, wird diese Warnung angezeigt. es ist wirklich nervig.

    – Benjamin Wen

    1. August 2017 um 4:01 Uhr

  • das ist eigentlich veraltet. Verwenden Sie ImageBackground oder (beste) position:absolute

    – Michèle

    3. Dezember 2017 um 14:14 Uhr

Joshs Benutzeravatar
Josch

Sie können verwenden flex: 1 Styling auf einem <Image> Element, damit es den gesamten Bildschirm ausfüllt. Sie können dann einen der Bildgrößenänderungsmodi verwenden, damit das Bild das Element vollständig ausfüllt:

<Image source={require('image!egg')} style={styles.backgroundImage} />

Stil:

import React from 'react-native';

let { StyleSheet } = React;

let styles = StyleSheet.create({
  backgroundImage: {
    flex: 1,
    resizeMode: 'cover', // or 'stretch'
  }
});

Ich bin mir ziemlich sicher, dass Sie das loswerden können <View> Wickeln Sie Ihr Bild ein und das wird funktionieren.

  • Ja, es funktioniert, ich habe das Bildelement ganz nach oben verschoben und seinen Stil auf eingestellt backgroundImage:{ justifyContent: 'center', alignItems: 'center', flex: 1, resizeMode: Image.resizeMode.contain, }, Vielen Dank

    – talpaz

    28. März 2015 um 23:47 Uhr


  • Nachdem ich eine Weile damit gekämpft hatte, fand ich es am einfachsten, das zu wickeln Image Komponente absolut positioniert View damit das Hintergrundbild hinter anderen Inhalten auf dem Bildschirm erscheint.

    – vhs

    29. Mai 2015 um 19:42 Uhr


  • Wichtige Änderung: <Image src=...> ist jetzt <Image source=...>

    – Nutzername

    28. Januar 2016 um 2:28 Uhr

  • Jetzt, wo der Z-Index unterstützt wird, würden Sie diese Antwort ändern?

    – makenova

    24. Juli 2016 um 22:13 Uhr

  • Es ist in Ordnung, aber das Bild dehnt sich aus und das Scrollen ist auf dem Bildschirm aktiviert

    – Ananta Prasad

    13. Juni 2018 um 11:17 Uhr

Benutzeravatar von Vinod Sobale
Vinod Sobale

Hinweis: Diese Lösung ist veraltet. Bitte beziehen Sie sich auf https://facebook.github.io/react-native/docs/images.html#background-image-via-nesting stattdessen

Versuchen Sie diese Lösung. Es wird offiziell unterstützt. Ich habe es gerade getestet und funktioniert einwandfrei.

var styles = StyleSheet.create({
  backgroundImage: {
    flex: 1,
    alignSelf: 'stretch',
    width: null,
  }
});

Und um es als Hintergrundbild zu verwenden, gehen Sie einfach wie folgt vor.

<Image style={styles.backgroundImage}>
  <View>
    <Text>All your stuff</Text>
  </View>
</Image>

  • Was zum Teufel wird das offiziell unterstützt?

    – rclai

    2. Dezember 2015 um 18:08 Uhr

  • Ja. Es ist. facebook.github.io/react-native/docs/…

    – Vinod Sobale

    30. Januar 2016 um 9:38 Uhr

  • Was nützt alignSelf und width hier?

    – Harkirat Saluja

    4. Januar 2017 um 11:21 Uhr

  • Du streckst auf die verfügbare Breite und width muss null haben, damit ‘stretch’ funktioniert

    – Vinod Sobale

    4. Januar 2017 um 11:54 Uhr

  • Zu Ihrer Information, Image-Komponenten können in der neuesten Version von React (0.51.0) keine untergeordneten Elemente haben. Dies funktioniert nicht mehr.

    – rplankenhorn

    13. Dezember 2017 um 13:18 Uhr

Update März 2018 Die Verwendung von Image ist veraltet. Verwenden Sie ImageBackground

  <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 >

Ich habe mehrere dieser Antworten ohne Erfolg für Android mit der React-Native-Version = 0.19.0 ausprobiert.

Aus irgendeinem Grund hat der resizeMode in meinem Stylesheet nicht richtig funktioniert? Allerdings, wenn sytlesheet hatte

backgroundImage: {
flex: 1,
width: null,
height: null,
}

und innerhalb des Image-Tags habe ich den resizeMode angegeben:

<Image source={require('path/to/image.png')} style= {styles.backgroundImage} resizeMode={Image.resizeMode.sretch}>

Es hat perfekt funktioniert! Wie oben erwähnt, können Sie Image.resizeMode.cover oder auchContain verwenden.

Hoffe das hilft!

Pawels Benutzeravatar
Pawel

UPDATE auf ImageBackground

Seit der Verwendung <Image /> Da ein Container für eine Weile veraltet ist, übersehen alle Antworten tatsächlich etwas Wichtiges. Wählen Sie für die richtige Verwendung <ImageBackground /> mit style und imageStyle Stütze. Wenden Sie alle bildrelevanten Stile an imageStyle.

Zum Beispiel:

<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

Benutzeravatar der Community
Gemeinschaft

Basierend auf der Antwort von Braden Rockwell Napier habe ich das gemacht BackgroundImage Komponente

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>

1412610cookie-checkWas ist der beste Weg, um ein Vollbild-Hintergrundbild in React Native hinzuzufügen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy