为多个屏幕反应原生图像

Posted

技术标签:

【中文标题】为多个屏幕反应原生图像【英文标题】:React Native Images for Multiple Screens 【发布时间】:2019-01-23 18:24:57 【问题描述】:

我想在屏幕上半部分显示一张图片。我正在使用这样的助焊剂。

            <View style=flex:0.5>
                <Image
                    style=width:null, height:null, flex:1, resizeMode:'stretch'
                            source=require('../../../Images/salad-congo.png')>
                </Image>
            </View>
            <View style=flex:0.5, backgroundColor:'yellow'>
                <Text>Hello</Text>
            </View>

问题: 问题是我的图像不适合所有屏幕尺寸。如果我以横向模式打开我的应用程序,图像将居中而不是覆盖上半部分的整个宽度和高度。如果我使用'resizeMode='stretch'',我的整个图像会以像素为单位被破坏,并且变得不可见。如何使我的图像在大屏幕上显得大,而对于小屏幕则明显覆盖整个屏幕。我需要对图像的分辨率做些什么吗?或者提供多张图片?如果是,那么如何为 androidios 处理它们

【问题讨论】:

【参考方案1】:

从 react native 导入尺寸,然后使用它来设置图像的大小

import Dimensions from 'react-native'
const SCREEN_WIDTH = Dimensions.get("window").width;
const logo = require("logo.png");

在渲染的返回中:

<Image source=logo style=styles.logo />


const styles = StyleSheet.create(
logo: 
height: SCREEN_WIDTH * 0.65,
width: SCREEN_WIDTH * 0.65,
marginLeft: SCREEN_WIDTH * 0.2

)

【讨论】:

为什么要将高度和宽度乘以 0.65?并通过乘以 0.2 添加一个边距? 因为它是我选择的尺寸,您可以乘以 0 到 1 之间的任何值,由您选择图像的尺寸。我还添加了一个marginLeft,因为我希望图像保持在屏幕中间(水平),但是您必须根据屏幕大小手动选择marginLeft的值,您必须测试每个值之间0和1看哪个更合适【参考方案2】:

所以我通过创建一个 2056x2056 的大图像解决了这个问题,然后通过正确使用 Flex 来获得所需的结果。在几部手机和平板电脑上测试了结果。工作正常。

 <View style=flex:1>
            <View style=flex:0.6, alignItems:'stretch'>
                <Image style=flex:1, width: null, height: null 
                       source=require('../../../Images/salad-congo2056x2056.png')/>
            </View>

            <View style=flex:0.1, backgroundColor:'#ffffff'>
                // Intentional gap
            </View>

            <View style=flex:0.3, backgroundColor:'red'>
                // Anything here
            </View>
 </View>

【讨论】:

以上是关于为多个屏幕反应原生图像的主要内容,如果未能解决你的问题,请参考以下文章

反应原生检查平板电脑或屏幕是不是以英寸为单位

如何准备下一个屏幕才能反应原生导航?

打开地图屏幕时,如何将 MapView 以用户当前位置为中心?反应原生博览会

反应原生 TextInput 离开我的屏幕

如何为反应原生应用程序实现屏幕锁定[关闭]

反应原生 - 图像未正确显示