如何在Android的React Native中设置阴影?

Ibr*_*med 58 react-native

嗨我正试图为我的工厂设置一个阴影,但我的尝试失败到目前为止我尝试设置阴影道具,但这只是为了ios所以我试图玩升力属性,但它看起来不正确.

这是我试过的

<View style={{width: 56, height: 56, elevation: 2, borderRadius: 28, marginBottom: 3, backgroundColor: 'rgba(231,76,60,1)'}}></View>
Run Code Online (Sandbox Code Playgroud)

我需要实现的目标

在此输入图像描述

Fuz*_*ree 103

UPDATE

添加css属性elevation: 1会在Android中呈现阴影,而无需安装任何第三方库.看到其他答案.

-

获取Android的阴影的一种方法是安装 react-native-shadow

自述文件的示例:

import React, {Component} from 'react' import {
    StyleSheet,
    View,
    Text,
    ScrollView,
    Image,
    TouchableHighlight } from 'react-native'

import {BoxShadow} from 'react-native-shadow'

export default class VideoCell 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 (
            <BoxShadow setting={shadowOpt}>
                <TouchableHighlight style={{
                    position:"relative",
                    width: 160,
                    height: 170,
                    backgroundColor: "#fff",
                    borderRadius:3,
                    // marginVertical:5,
                    overflow:"hidden"}}>
                    …………………………
                </TouchableHighlight>
            </BoxShadow>
        )
    } 
}
Run Code Online (Sandbox Code Playgroud)

  • 添加css属性`elevation:1`会在Android中呈现阴影,而无需安装任何第三方库.我用React Native 0.52测试了它 (4认同)
  • 使用“高程”时要小心,因为它不会尊重您对“阴影”的设置,例如颜色和偏移量。 (2认同)

Aja*_*ter 78

不使用第三方库的另一种解决方案是使用elevation.

从反应原生文档中拉出来. https://facebook.github.io/react-native/docs/view.html

(仅限Android)使用Android的基础高程API设置视图的高程.这会为项目添加阴影,并影响重叠视图的z顺序.仅在Android 5.0+上受支持,对早期版本没有影响.

elevation将进入该style物业,它可以像这样实施.

<View style={{ elevation: 2 }}>
    {children}
</View>
Run Code Online (Sandbox Code Playgroud)

海拔越高,阴影越大.希望这可以帮助!

  • @divine外括号用于JS插值,内部用于对象 (7认同)
  • 这只会在视图底部产生阴影,它不允许你在另一边做阴影 (4认同)
  • 但是要小心 `elevation`——就像它在文档中所说的那样,它“影响重叠视图的 z-order”——它基本上就像一个你不能覆盖的 `zIndex`,并且会导致真正令人困惑的行为。例如,在带有粘性部分标题的 SectionList 中,如果您将 `elevation: 3` 放在列表中的项目上,它们会突然开始_over_ 标题,将它们隐藏起来(当然仅在 android 上)。这几乎不可能调试! (3认同)
  • 注意:这仅适用于Android 5.0+ (2认同)

小智 67

elevation除非backgroundColor已为元素指定,否则 Android 上的style 属性不起作用。

Android - 没有 backgroundColor 的高程样式属性不起作用

例子:

{
  shadowColor: 'black',
  shadowOpacity: 0.26,
  shadowOffset: { width: 0, height: 2},
  shadowRadius: 10,
  elevation: 3,
  backgroundColor: 'white'
}
Run Code Online (Sandbox Code Playgroud)

  • 这确实需要更多的赞成票,我不知道为什么它不起作用 (7认同)
  • 这就是解决方案!!!背景颜色使它工作!!!!谢谢^_^ (3认同)

小智 37

你可以试试

//ios    
shadowOpacity: 0.3,
shadowRadius: 3,
shadowOffset: {
    height: 0,
    width: 0
},
//android
elevation: 1
Run Code Online (Sandbox Code Playgroud)

  • 海拔不会为 android 创建足够大或可配置的阴影 - react-native-shadow 似乎是最好的选择 (3认同)

Moh*_*neh 7

以下内容将帮助您指定所需Platform的样式:

import { Text, View, Platform } from 'react-native';

......
<View style={styles.viewClass}></View>
......


const styles = {
viewClass: {
    justifyContent: 'center',
    alignItems: 'center',
    height: 60,
    ...Platform.select({
        ios: {
            shadowColor: '#000',
            shadowOffset: { width: 0, height: 2 },
            shadowOpacity: 0.2,
        },
        android: {
            elevation: 1

        },
      }),
}
};
Run Code Online (Sandbox Code Playgroud)

  • 不需要指定平台,因为在iOS中高程属性将被忽略 (3认同)
  • @cody是的,你是对的!但我的示例显示了如何为不同平台设置样式。 (2认同)

Sam*_*aik 5

只需使用'elevation'属性来获取android中的阴影.类似下面的东西

const Header = () => {
    // const { textStyle, viewStyle } = styles;
    return (
      <View style={styles.viewStyle}>    
        <Text style={styles.textStyle}>Albums</Text>
      </View>
    )
}


const styles = {
    viewStyle:{
        backgroundColor:'#f8f8f8',
        justifyContext:'center',
        alignItems: 'center',
        padding:16,
        elevation: 2
    }
}
Run Code Online (Sandbox Code Playgroud)


Ara*_*ras 5

对于android屏幕,您可以使用此属性elevation

例如 :

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

    //Its for IOS
    shadowColor: '#000',
    shadowOffset: { width: 0, height: 2 },
    shadowOpacity: 0.2,

    // its for android 
    elevation: 5,
    position:'relative',

},
Run Code Online (Sandbox Code Playgroud)


Sah*_*a D 5

我添加了borderBottomWidth:0,并且在android中对我来说效果很好。


Roy*_*yBS 5

你可以使用我的react-native-simple-shadow-view

  • 这可以在 Android 中启用与 iOS 中几乎相同的阴影
  • 无需使用高程,使用与 iOS 相同的阴影参数(shadowColor、shadowOpacity、shadowRadius、offset 等),因此您无需编写特定于平台的阴影样式
  • 可用于半透明视图
  • 在 android 18 及更高版本中受支持