82 votes

Comment définir des ombres dans React Native pour Android?

Bonjour, je essaie de définir une ombre pour mon fab mais mes tentatives ont échoué jusqu'à présent j'ai essayé de définir des propriétés shadow mais c'est pour ios seulement donc j'ai essayé de jouer avec la propriété elevation mais ça ne semble pas correct.

Voici ce que j'ai essayé

Ce que j'ai besoin de réaliser

entrer la description de l'image ici

137voto

FuzzyTree Points 8321

Ajouter la propriété CSS elevation: 1 rend l'ombre sur Android sans installer de bibliothèque tierce.

elevation est une propriété de style disponible uniquement sur les éléments View d'Android.

Voir : Documentation de React Native pour la propriété de style elevation


Si vous êtes ouvert aux logiciels tiers, une autre façon d'obtenir des ombres pour Android est d'installer react-native-shadow.

Exemple (adapté du readme):

import React, { Component } from "react";
import { TouchableHighlight } from "react-native";

import { BoxShadow } from "react-native-shadow";

export default class ShadowButton extends Component {
  render() {
    const shadowOpt = {
      width: 160,
      height: 170,
      color: "#000",
      border: 2,
      radius: 3,
      opacity: 0.2,
      x: 0,
      y: 3,
      style: { marginVertical: 5 }
    };

    return (

          ...

    );
  }
}

7 votes

Ajouter la propriété CSS élévation : 1 rend l'ombre sur Android sans installer de bibliothèque tierce. Je l'ai testé avec React Native 0.52.

3 votes

Faites attention lorsque vous utilisez elevation car cela ne respectera pas vos paramètres pour shadow, tels que la couleur et le décalage.

0 votes

Cette librairie, comment faire si je ne connais pas la largeur et la hauteur spécifiques des enfants. . . parce que cela est requis.

82voto

Ajackster Points 1359

Une autre solution sans utiliser de bibliothèque tierce est d'utiliser elevation.

Extrait de la documentation de react-native. https://facebook.github.io/react-native/docs/view.html

(Android seulement) Définit l'élévation d'une vue en utilisant l'API d'élévation sous-jacente d'Android. Cela ajoute une ombre portée à l'élément et affecte l'ordre Z pour les vues superposées. Pris en charge uniquement sur Android 5.0+, n'a aucun effet sur les versions antérieures.

elevation ira dans la propriété style et peut être implémenté comme ceci.

    {children}

Plus l'élévation est élevée, plus l'ombre est grande. J'espère que cela vous aide!

0 votes

Pourquoi l'attribut d'élévation est-il écrit à l'intérieur de 2 accolades?

7 votes

@divine la parenthèse externe est pour l'interpolation JS, la interne est pour un objet

4 votes

Ce ne fait de l'ombre qu'en bas d'une vue, cela ne vous permet pas de faire des ombres sur les autres côtés

46voto

lam luu Points 484

Vous pouvez essayer

//ios    
shadowOpacity: 0.3,
shadowRadius: 3,
shadowOffset: {
    height: 0,
    width: 0
},
//android
elevation: 1

3 votes

L'élévation ne crée pas une ombre suffisamment grande ou configurable pour Android - react-native-shadow semble être la meilleure option.

7voto

Aras Points 389

Pour un écran Android, vous pouvez utiliser cette propriété elevation.

par exemple :

 HeaderView:{
    backgroundColor:'#F8F8F8',
    justifyContent:'center',
    alignItems:'center',
    height:60,
    paddingTop:15,

    //C'est pour IOS
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.2,

    // c'est pour Android
    elevation: 5,
    position:'relative',

},

0 votes

Cela fonctionne mais, sur Android, comment puis-je changer la couleur de l'ombre?

5voto

SameerShaik Points 186

Il suffit d'utiliser la propriété 'elevation' pour obtenir une ombre sur Android. quelque chose comme ci-dessous

const Header = () => {
    // const { textStyle, viewStyle } = styles;
    return (

        Albums

    )
}

const styles = {
    viewStyle:{
        backgroundColor:'#f8f8f8',
        justifyContext:'center',
        alignItems: 'center',
        padding:16,
        elevation: 2
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X