美文网首页前端
React-native 简单的屏幕适配

React-native 简单的屏幕适配

作者: niklause_sun | 来源:发表于2018-09-11 14:52 被阅读257次

准备

官方文档中宽度和高度中可以知道,RN中的单位是dp,这个跟Android中的单位是一致的。

A dp is equal to one physical pixel on a screen with a desity of 160。To calculate dp:

dp = (width in pixels * 160) / screen desity。

screen density是屏幕密度,它约等于(dpi/160),在RN中我们可以通过PixelRatio得到:

  • PixelRatio.get() === 1 // mdpi Android设备(160 dpi)
  • PixelRatio.get() === 1.5 // hdpi Android设备 (240 dpi)
  • PixelRatio.get() === 2 // iPhone 4 - 6 设备 xhdpi Android设备(320dpi)
  • PixelRatio.get() === 3 // iPhone 6 puls - iPhoneX xxhdpi Android设备(480 dpi)
  • PixelRatio.get() === 3.5 // Nexus 6

RN中的尺寸单位为dp,而设计稿中的单位为px

1dp=(1 * density) px,相反1px=(1/density)dp。(density密度跟pixelRatio相近,即设备的像素比,也就是说,在像素比越小的设备上,同样的尺寸显示的越大)

一般的设计稿都是以iPhone 6为基础来设计的,但是假如直接在代码中使用原始的值,在iPhone6中也许可以很好的适配,但在低像素的安卓手机和 高像素的plus就会出现很大的显示差别。

所以为了能够使设计稿在不同手机上的显示尽量相同,我们需要对拿到的尺寸进行统一的处理以适配不同的屏幕。

另外,由于设备的高度不一样,所以我们需要对不同的宽高的设备也进行相应的适配。

我们进行的处理是,对于像素比为3的设备还是使用原设计稿的尺寸,而小于这些设备,则按照设备的屏幕宽度进行等比例适配。

完整代码如下:

// px.js
import { Dimesions, Platform, PixelRatio } from 'react-native';

const deviceWidth = Dimension.get('window').width;

export default function px(size) {
    if (PixelRatio.get() >= 3 && Platform.Os === 'ios' && size === 1) {
        return size;
    }
    return deviceWidth / 750 * size;
}

我们在使用中就可以直接使用 width: px(120)就可以了。

相关文章

网友评论

    本文标题:React-native 简单的屏幕适配

    本文链接:https://www.haomeiwen.com/subject/mddugftx.html