Как установить тени в, Реагируют Собственный компонент для андроида?

Привет пытаюсь установить тень для моего потрясающего, но мои попытки перестали работать до сих пор, я пытался установить теневые опоры, но это для iOS только, таким образом, я пытался играть со свойством повышения, но это не выглядит правильным.

Вот то, что я попробовал


Чего я должен достигнуть

enter image description here

57
задан 25 December 2016 в 12:46

6 ответов

Генерируя тени для круга, реагируйте собственный компонент, android

Based on ответы здесь, и на тексте, который я нашел в GitHub (react-native-shadow), я сделал немного тестов и думал, что некоторые люди могут найти следующее полезное.

  • тесты находятся на круговой кнопке
  • среда: Windows 10 ПК, реагировать-собственный-компонент, использующий react-native-shadow (который не работает хорошо на круг) и параметр повышения реагировать-собственного-компонента ( https://facebook.github.io/react-native/docs/view-style-props#elevation) с различными значениями, работая на эмуляторе андроида (genymotion)

Вот, - то, как экран похож:

enter image description here

Код:

import React, { Component } from 'react';
import { View, TouchableHighlight, Text } from 'react-native';
import { BoxShadow } from 'react-native-shadow'

export default class ShadowsTest extends Component {

  render() {
    const shadowOpt = {
      width: 100,
      height: 100,
      color: "#000",
      border: 2,
      radius: 50,
      opacity: 0.8,
      x: 3,
      y: 3,
      //style: { marginVertical: 5 }
    }

    return (
      <View style={{ flex: 1 }}>
        <Header
          text={"Shadows Test"} />

        <View style={{ flexDirection: 'row', justifyContent: 'center' }}>
          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
            <TouchableHighlight style={{
              position: 'relative',
              width: 100,
              height: 100,
              backgroundColor: "#fff",
              borderRadius: 50,
              borderWidth: 0.8,
              borderColor: '#000',
              // marginVertical:5,
              alignItems: 'center',
              justifyContent: 'center',
              overflow: "hidden" }}>
              <Text style={{ textAlign: 'center' }}>
                0: plain border
              </Text>
            </TouchableHighlight>
          </View>

          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
            <BoxShadow setting={ shadowOpt }>
              <TouchableHighlight style={{
                position: 'relative',
                width: 100,
                height: 100,
                backgroundColor: "#fff",
                borderRadius: 50,
                borderWidth: 1,
                borderColor: '#aaa',
                // marginVertical:5,
                alignItems: 'center',
                justifyContent: 'center',
                overflow: "hidden" }}>
                <Text style={{ textAlign: 'center' }}>
                  1: RN shadow package
                </Text>
              </TouchableHighlight>
            </BoxShadow>
          </View>
        </View>

        <View style={{ flexDirection: 'row', justifyContent: 'center' }}>
          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
              <TouchableHighlight style={{
                position: 'relative',
                width: 100,
                height: 100,
                backgroundColor: "#fff",
                borderRadius: 50,
                borderWidth: 1,
                borderColor: '#aaa',
                // marginVertical:5,
                alignItems: 'center',
                justifyContent: 'center',
                overflow: "hidden",
                shadowOffset: { width: 15, height: 15 },
                shadowColor: "black",
                shadowOpacity: 0.9,
                shadowRadius: 10,
               }}>
                <Text style={{ textAlign: 'center' }}>
                  2: vanilla RN: shadow (may work on iOS)
                </Text>
              </TouchableHighlight>
          </View>
          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
              <TouchableHighlight style={{
                position: 'relative',
                width: 100,
                height: 100,
                backgroundColor: "#fff",
                borderRadius: 50,
                borderWidth: 1,
                borderColor: '#aaa',
                // marginVertical:5,
                alignItems: 'center',
                justifyContent: 'center',
                overflow: "hidden",
                elevation: 15,
               }}>
                <Text style={{ textAlign: 'center' }}>
                  3: vanilla RN: elevation only (15)
                </Text>
              </TouchableHighlight>
          </View>
        </View>

        <View style={{ flexDirection: 'row', justifyContent: 'center', marginBottom: 30 }}>
          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
              <TouchableHighlight style={{
                position: 'relative',
                width: 100,
                height: 100,
                backgroundColor: "#fff",
                borderRadius: 50,
                borderWidth: 1,
                borderColor: '#aaa',
                // marginVertical:5,
                alignItems: 'center',
                justifyContent: 'center',
                overflow: "hidden",
                elevation: 5,
               }}>
                <Text style={{ textAlign: 'center' }}>
                  4: vanilla RN: elevation only (5)
                </Text>
              </TouchableHighlight>
          </View>
          <View style={{ margin: 10, alignItems: 'center',
              justifyContent: 'center' }}>
              <TouchableHighlight style={{
                position: 'relative',
                width: 100,
                height: 100,
                backgroundColor: "#fff",
                borderRadius: 50,
                borderWidth: 1,
                borderColor: '#aaa',
                // marginVertical:5,
                alignItems: 'center',
                justifyContent: 'center',
                overflow: "hidden",
                elevation: 50,
               }}>
                <Text style={{ textAlign: 'center' }}>
                  5: vanilla RN: elevation only (50)
                </Text>
              </TouchableHighlight>
          </View>
        </View>
      </View>
    )
  }
}
0
ответ дан 1 November 2019 в 15:14

elevation свойство стиля на Android не работает, если backgroundColor не был указан для элемента.

Android - свойство стиля повышения не работает без примера backgroundColor

:

{
  shadowColor: 'black',
  shadowOpacity: 0.26,
  shadowOffset: { width: 0, height: 2},
  shadowRadius: 10,
  elevation: 3,
  backgroundColor: 'white'
}
1
ответ дан 1 November 2019 в 15:14

Можно использовать мой react-native-simple-shadow-view

  • , который Это включает почти идентичной тени в Android как в iOS
  • Никакая потребность использовать повышение, работы с теми же теневыми параметрами iOS (shadowColor, shadowOpacity, shadowRadius, для возмещения, и т.д.), таким образом, Вы не должны писать платформу, определенные стили тени
  • Могут использоваться с полупрозрачными представлениями
  • Поддерживаемый в андроиде 18 и
3
ответ дан 1 November 2019 в 15:14

Я добавил borderBottomWidth: 0 и это хорошо работало для меня в андроиде.

5
ответ дан 1 November 2019 в 15:14

По некоторым причинам это только работало на мой путем добавления borderColor: 'transparent' (или любой другой цвет). Мой вывод стиля похож на это:

{
        borderColor: "transparent", // Required to show shadows on Android for some reason !?!?
        shadowColor: '#000',
        shadowOffset: {
          width: 0,
          height: 0,
        },
        shadowOpacity: 0.3,
        shadowRadius: 5,

        elevation: 15,
      }
0
ответ дан 1 November 2019 в 15:14

Также я хотел бы добавить что, если для попытки применить тень в Компоненте TouchableHighlight, в котором у ребенка есть borderRadius, родительский элемент (TouchableHighlight) также, нужен радиус, приведенный в порядок к работе опоры повышения над Android.

2
ответ дан 1 November 2019 в 15:14

Другие вопросы по тегам:

Похожие вопросы: