React Native 之 像素比例(十七)

在 React Native 中,PixelRatio 是一个用于获取设备像素比(Pixel Ratio)的实用工具。像素比(或称为设备像素密度、DPI 密度等)是物理像素和设备独立像素(DIPs 或 DPs)之间的比率。设备独立像素是一种抽象的度量单位,使得开发者可以编写不依赖于特定屏幕分辨率的代码。

根据像素密度获取指定大小的图片

javascript 复制代码
//如果应用运行在一个高像素密度的设备上,显示的图片也应当分辨率更高。
//一个取得缩略图的好规则就是将显示尺寸乘以像素密度比:
const image = getImage({
  width: PixelRatio.getPixelSizeForLayoutSize(200),
  height: PixelRatio.getPixelSizeForLayoutSize(100),
});
<Image source={image} style={{width: 200, height: 100}} />
javascript 复制代码
import React from 'react';  
import { View, Text, PixelRatio, StyleSheet } from 'react-native';  
import { Dimensions } from 'react-native'; //使用了 `Dimensions` API 来获取屏幕宽度
const MyComponent = () => {  
  // 使用 PixelRatio 来获取像素比  
  const pixelRatio = PixelRatio.get();  
  返回设备的像素密度,例如:
	PixelRatio.get() === 1
	mdpi Android 设备
	PixelRatio.get() === 1.5
	hdpi Android 设备
	PixelRatio.get() === 2
	iPhone SE、6S、7、8
	iPhone XR系列
	苹果手机 11
	xhdpi Android 设备
	PixelRatio.get() === 3
	iPhone 6S Plus、7 Plus、8 Plus
	iPhone X、XS、XS Max
	iPhone 11 Pro、11 Pro Max
	像素, Pixel 2
	xxhdpi Android 设备
	PixelRatio.get() === 3.5
	Nexus 6(英语:Nexus 6)
	Pixel XL、Pixel 2 XL
	xxxhdpi Android 设备
  // 假设我们想要一个始终占据屏幕宽度 1/3 的元素  
  // 但我们希望这个元素的高度是其宽度的 2 倍(在 DIP 中)  
  // 我们可以通过 PixelRatio 来调整其高度,以确保在不同分辨率设备上看起来一致  
  const elementWidth = Math.round(PixelRatio.getPixelSizeForLayoutSize(Dimensions.get('window').width / 3));  
  const elementHeight = Math.round(pixelRatio * 2 * (elementWidth / pixelRatio));  
  
  // 注意:由于我们使用的是 PixelRatio 来调整高度,所以即使在不同分辨率的设备上,  
  // 这个元素的高度也会相对于其宽度保持 2:1 的比例  
  
  return (  
    <View style={styles.container}>  
      <View style={{ width: elementWidth, height: elementHeight, backgroundColor: 'lightblue' }} />  
      <Text>Pixel Ratio: {pixelRatio.toFixed(2)}</Text>  
    </View>  
  );  
};  
  
const styles = StyleSheet.create({  
  container: {  
    flex: 1,  
    justifyContent: 'center',  
    alignItems: 'center',  
    padding: 20,  
  },  
});  
  
export default MyComponent;  

PixelRatio.getFontScale() 方法使用

PixelRatio.getFontScale() 是 React Native

中的一个实用方法,用于获取设备的字体大小缩放比例。这个比例对于响应式设计特别有用,因为它允许你根据用户的字体大小设置来动态调整 UI

元素的大小。

动态调整字体大小代码栗子:

javascript 复制代码
import { PixelRatio } from 'react-native';  
  
const baseFontSize = 18; // 设计稿上的字体大小  
const fontScale = PixelRatio.getFontScale(); // 获取字体缩放比例  
  
// 计算动态字体大小  
const dynamicFontSize = Math.round(baseFontSize * fontScale);  
  
// 在样式中使用动态字体大小  
const styles = {  
  myText: {  
    fontSize: dynamicFontSize,  
  },  
};

getPixelSizeForLayoutSize()

将一个布局尺寸(dp)转换为像素尺寸(px)。返回一个整数数值。

javascript 复制代码
static getPixelSizeForLayoutSize(layoutSize: number): number

roundToNearestPixel()

将布局大小 (dp) 四舍五入为与整数像素对应的最接近布局大小。例如,在 PixelRatio 为 3 的设备上,正好对应于 (8.33 * 3) = 25 像素。PixelRatio.roundToNearestPixel(8.4) = 8.33。

javascript 复制代码
static roundToNearestPixel(layoutSize)
相关推荐
天若有情6739 小时前
自己开发一款极简 Vanilla 原生前端框架,已开源上架 NPM & GitHub
前端框架·npm·github
沐言人生13 小时前
React Native 源码分析1——HybridData 机制深度分析
android·react native
空中海13 小时前
01 React Native 基础、核心组件与布局体系
javascript·react native·react.js
空中海13 小时前
05 React架构设计、项目实践与专家清单
前端·react.js·前端框架
空中海16 小时前
04 工程化、质量体系与 React 生态
前端·ubuntu·react.js
Yue16816 小时前
一文教你五分钟学会Zustand,React状态管理更加方便!
react native
空中海16 小时前
03 性能、动画与 React Native 新架构
react native·react.js·架构
萑澈16 小时前
Ripple新前端框架的发展与AI原生全栈开发前景:架构重塑与生产力范式转移研究报告
架构·前端框架·ai-native
空中海17 小时前
02 React Native状态、导航、数据流与设备能力
javascript·react native·react.js
空中海18 小时前
04 React Native工程化、质量、发布与生态选型
javascript·react native·react.js