react-native 屏幕尺寸和文字大小适配

2023-10-29

转载存档

现在的手机品牌和型号越来越多,导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同,

比如我们的设计稿一个View的大小是300px,如果直接写300px,可能在当前设备显示正常,但到了其他设备可能就会偏小或者偏大,这就需要我们对屏幕进行适配。

安卓原生的话有自己的适配规则,可以根据不同的尺寸建立不同的文件夹,系统会根据当前的设备尺寸取对应的大小的布局。而RN本身并没有适配规则,而原生的又比较反锁,这就需要我们自己去对屏幕进行适配。


先看一下刚出炉的屏幕适配工具类:

/**
 * Created by zhuoy on 2017/6/27.
 * 屏幕工具类
 * ui设计基准,iphone 6
 * width:750
 * height:1334
 */

/*
 设备的像素密度,例如:
 PixelRatio.get() === 1          mdpi Android 设备 (160 dpi)
 PixelRatio.get() === 1.5        hdpi Android 设备 (240 dpi)
 PixelRatio.get() === 2          iPhone 4, 4S,iPhone 5, 5c, 5s,iPhone 6,xhdpi Android 设备 (320 dpi)
 PixelRatio.get() === 3          iPhone 6 plus , xxhdpi Android 设备 (480 dpi)
 PixelRatio.get() === 3.5        Nexus 6       */

import {
    Dimensions,
    PixelRatio,
} from 'react-native';


export const deviceWidth = Dimensions.get('window').width;      //设备的宽度
export const deviceHeight = Dimensions.get('window').height;    //设备的高度
let fontScale = PixelRatio.getFontScale();                      //返回字体大小缩放比例

let pixelRatio = PixelRatio.get();      //当前设备的像素密度
const defaultPixel = 2;                           //iphone6的像素密度
//px转换成dp
const w2 = 750 / defaultPixel;
const h2 = 1334 / defaultPixel;
const scale = Math.min(deviceHeight / h2, deviceWidth / w2);   //获取缩放比例
/**
 * 设置textsp
 * @param size sp
 * return number dp
 */
export function setSpText(size: number) {
    size = Math.round((size * scale + 0.5) * pixelRatio / fontScale);
    return size / defaultPixel;
}

export function scaleSize(size: number) {

    size = Math.round(size * scale + 0.5);
    return size / defaultPixel;
}

因为一般的设计稿都是以iphone6为基础来设计的,所以这里以iPhone6为基础写这个工具类,

当然如果你的不是,可以在上面更改,defaultPixelRatio改成你用的设备像素就好了。


我们这里对文字和尺寸进行了适配。

看一下同样的代码在不同手机的显示效果:

代码:

export default class Home extends React.Component {

    render() {

        return (
            <View>
                <Text style={{fontSize: 30}}>没适配,本机像素:{PixelRatio.get()}</Text>
                <Text style={{fontSize: ScreenUtil.setSpText(30)}}>已适配</Text>
                <View style={{
                    height: 50, width: 240, backgroundColor: 'green'
                }}></View>
                <View style={{
                    height: ScreenUtil.scaleSize(50),
                    width: ScreenUtil.scaleSize(240),
                    backgroundColor: 'red'
                }}></View>

            </View>
        )
    }

}

这里,我用了像素为1.5和2.65的2个安卓设备来进行展示:


如图:左侧是大屏,右侧是小屏手机。

第一行都是大小为30px的文字,因为屏幕本身的原因,导致看起来可能大小不同,但其实这是相同的大小文字。

而第二行我们适配过的看以看到,在大屏上(相对于iPhone6),30px进行了放大,而小屏上则进行了缩小的操作。

这样,在不同设备上,就会显示合适的字体大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react-native 屏幕尺寸和文字大小适配 的相关文章

  • 服务器虚拟化方需求分析报告,服务器虚拟化解决方案报告书.doc

    WORD格式可编辑 专业知识整理分享 服务器虚拟化解决方案 Citrix XenServer服务器虚拟化解决方案 1 1 方案综述 1 1 1服务器虚拟化的业务及应用需求 随着企业业务的飞速发展 越来越多的业务系统依赖于数据中心的支撑 其中
  • 泛微移动表单校验手机号跟邮箱

    泛微移动表单校验手机号跟邮箱 var iphoneVal f phone val 获取表单字段 var checkIphone d 1 345789 d
  • h5上下滑动动画效果(vue)

    1 详情介绍 图片可以使用网络图片 根据请求过来的图片来获取高度要控制滑动的位置 可以换成视频 要实现滑动播放视频的效果 并且可以在上面添加一些其他的功能 白色背景区域可以展示对应的数据 具体效果看文章末尾 2 编码介绍 template部
  • UNIX环境高级编程 学习笔记 第十九章 伪终端

    终端登录是经由终端设备进行的 终端设备天然提供终端语义 在终端和运行程序之间有一个终端行规程 通过该规程我们能设置终端特殊字符 如退格 行删除 中断等 但当一个登录请求到达网络连接时 终端行规程并不是自动被加载到网络连接和登录shell之间
  • VSCode在linux服务器下launch.json和tasks.json等文件配置

    前言 用win下的VSCode远程连接linux服务器后 就可以用VSCode运行linux下代码了 在编译运行代码前 按照VSCode的要求 我们要给编译和执行操作分别配置一堆参数 这就是launch json和tasks json配置的
  • Android WebView加载优化,Android WebView 优化页面加载效果

    目前带有Web功能的APP越来越多 为了能够更好的使用WebView展示页面 可以考虑做相关的优化 WebView 缓存 资源文件本地存储 客户端UI优化 目前webapp越来越多 体验也越来越好 为了能够更好的使用WebView展示出流畅
  • 深入解析Spring使用枚举接收参数和返回值机制并提供自定义最佳实践

    Spring对应枚举传参 返回值默认是用字面量实现的 实际情况更复杂 而 阿里巴巴Java开发手册 规定接口返回值不可以使用枚举类型 包括含枚举类型的POJO对象 为此 本文探究了Spring内部对枚举参数的传递和处理机制 并提供了一套自定
  • JULES模型

    参考文献 1 2020 Calibrating soybean parameters in JULES 5 0 from the US Ne2 3 FLUXNET sites and the SoyFACE O 3 expe 流程 2 20
  • 排序算法详解

    概述 冒泡排序 应用1 把数组排成最小的数 应用2 移动零到数组末尾 排序算法是一类非常经典的算法 说来简单 说难也难 刚学编程时大家都爱用冒泡排序 随后接触到选择排序 插入排序等 历史上还有昙花一现的希尔排序 公司面试时也经常会问到快速排
  • 二维数组. 转置矩阵

    转自 二维数组 转置矩阵 知乎 二维数组 转置矩阵 Diamon 2 人赞同了该文章 867 转置矩阵 给你一个二维整数数组 matrix 返回 matrix 的 转置矩阵 矩阵的 转置 是指将矩阵的主对角线翻转 交换矩阵的行索引与列索引
  • 如何让“ChatGPT自己写出好的Prompt的“脚本在这里

    写个好的Prompt太费力了 在网上 你可能会看到很多人告诉你如何写Prompt 需要遵循各种规则 扮演不同的角色 任务明确 要求详细 还需要不断迭代优化 写一个出色的Prompt需要投入大量的时间和精力 甚至有一些公开的Prompt的开源
  • java前后端交互_Java之前后端数据交互

    1 前台发送数据到服务端 以及接受后台数据 前台发送数据到服务端 有两种方法 1 使用 表单发送同步请求 参数inputStr 参数intputInt 2 使用ajax发送异步请求 发送的数据为json对象 参数username 参数pas
  • 【报童模型】随机优化问题&&二次规划

    面对需求的不确定性 报童模型是做库存优化的常见模型 而标准报童模型假设价格是固定的 此时求解一个线性规划问题 可以得到最优订货量 这种模型存在局限性 因为现实世界中价格与需求存在一定的关系 本文假设需求q是价格p的线性函数 基于历史需求数据
  • 面试之你为什么从上家公司离职

    在上家公司 你为什么离职 请相信 百分之八十的面试官 要么是HR要么是技术负责人 或多或少都会问到的问题 如果问你这个问题 你该如何回答 举几个不太恰当的例子 大家尽量不要用下面的理由 我是感觉不太好 1 因为上家公司不能办公室谈恋爱 我就
  • centos7.0中搭建dhcp服务器

    一 dhcp 二 配置dhcp的方法 1 安装dhcp服务器 使用命令 vpm qa dhcp 查看一下dhcp有没有安装 如果没安装将不会有任何提示信息 如果安装好了 将会返回dhcp的版本号 可以看到我已经安装好了 在centos7的安
  • Swagger2介绍及使用

    项目中整合Swagger2 1 什么是swagger2 2 常用注解 3 项目中整合Swagger2 3 1 引入Swagger2依赖 3 2 编写swgger2配置类代码 3 3 在需要测试的模块中引入有swagger2的模块坐标 3 4
  • QT 智能提示设置

    关于QT的智能提示 有两点 一 默认只能在Ctrl Space或打 会自动转成 gt 的时候会出现 由于Ctrl Space默认在我电脑上是输入法的切换 所以一直以为没这个功能 敲代码时特别郁闷 于是在QT Creator中的Tool gt
  • 离散事件仿真原理DES

    参考 SYSTEM SIMULATION AND OPTIMIZATION 目录 1 系统仿真原理 1 1系统 模型和系统仿真 1 2系统仿真分类 1 2 1 蒙特卡洛仿真 Monte Carlo Simulation 1 2 2 离散系统
  • 傅里叶变换的一些总结

    傅里叶变换的一些总结 1 三角函数的正交性 三角函数系 1 c o s 0 x

随机推荐

  • 2023年Java面试笔试题

    Java 第一部分 1 什么叫多态 多态是同一个行为具有多个不同表现形式或形态的能力 即同一个接口采用不同的实例而执行不同的操作 2 以下哪个选 项属于多态存在的必要条件 A 继承 B 重写 C 父类引用指向子类对象 D 以上都是 多态存在
  • C语言代码规范

    1 排版 1 1 程序块要采用缩进风格编写 缩进的空格数为4个 1 2 相对独立的程序块之间 变量说明之后必须加空行 1 3 较长的语句 gt 80字符 要分成多行书写 长表达式要在低优先级操作符处划分新行 操作符放在新行之首 划分出的新行
  • 「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏

    本文主要介绍在多个页面存在相同部分时 如何提取公共组件然后在多个页面中导入组件重复使用来减少重复代码 在这基础上介绍了通过嵌套路由的方式来避免页面较多或公共部分较多的情况下 避免不断手动导入公共组件的麻烦 并且加快页面跳转的速度 文章目录
  • Java集合(List、Set、Map)

    Java中的集合是用于存储和组织对象的数据结构 Java提供了许多不同的集合类 包括List Set和Map等 以满足不同的需求 下面将介绍一些常见的Java集合类及其使用方法 一 List List是一个有序的集合 它允许元素重复出现 并
  • MultipleFile转File、File转Byte

    MultipleFile转File File转Byte 工具类 file2byte param file return public static byte convertFileToByteArray File file try File
  • 多维数组np.pad函数的理解

    多维数组np pad函数的理解 原函数是 np pad array x1 y1 x2 y2 x3 y3 constant x1 y1 意思是着在a这个三维矩阵中 整个大矩阵中首尾分别添加x1 y1个和a中各个矩阵形状一样的0矩阵 效果如下图
  • 抓取鼠标动画

    今天给大家分享一个抓取鼠标的动画 嗯 真的是抓取鼠标 代码如下
  • python怎么封装函数_python怎么封装函数

    什么是封装 在程序设计中 封装 Encapsulation 是对具体对象的一种抽象 即将某些部分隐藏起来 在程序外部看不到 其含义是其他程序无法调用 要了解封装 离不开 私有化 就是将类或者是函数中的某些属性限制在某个区域之内 外部无法调用
  • 连接器出线方法分享(持续更新)

  • 基于情境化时空网络的出租车OD需求预测

    1 文章信息 Contextualized Spatial Temporal Network for Taxi Origin Destination Demand Prediction 是2019年发表在IEEE上的一篇文章 2 摘要 本文
  • 区块链之添加节点

    1 查询节点信息 gt admin nodeInfo enode enode b817560f061b1f14551f87060806847c4c6b7cf8b56b6027fd3d8400c3abb4e2a3d535dd78ab46f28
  • CAD打开字体无法选择,cad打开无字体,cad无法加载字体

    在命令栏中输入filedia 然后回车 输入1保存关闭 再重新打开即可
  • gcc编译出现:error: invalid operands to binary & (have ‘char *’ and ‘int *’)

    1 2 gt File Name ptr variable c 3 gt Author Mr Yang 4 gt Purpose 演示指向变量的指针 5 gt Created Time 2017年06月03日 星期六 08时47分33秒 6
  • JDBC PostgreSQL

    上一节 JDBC可以操作多种数据库 而且都是标准化操作 区别仅仅在使用不同的数据库连接驱动程序 及URL连接方式的书写 引用SQL包 import java sql public class JDBCTest param args publ
  • 关于RocketMq消息积压问题排查

    1 最近生产的mq出现了一个问题 我的消费者是集群 就是双节点 现在消息积压到1亿多条 如下图所示 其中有两个问题 问题1 就是为什么我的消息积压这么多 问题2 我的消费者是集群 为什么只有一台消息在消费 2 接着开始排查问题 结果发现在消
  • conda进行transformers安装

    首先建立新环境 conda create n myenv python 3 8 安装numpy和pytorch conda install numpy conda install pytorch torchvision torchaudio
  • 人脸检测 + 数据训练 + 人脸识别

    准备工作 安装opencv pip install opencv 安装opencv contrib pip install opencv contrib 创建文件夹 文件结构为 一 编写一个基础的人脸识别 import cv2 as cv
  • 服务器存档里怎么修改器,云服务器存档修改器

    云服务器存档修改器 内容精选 换一换 修改云服务器信息 目前支持修改云服务器名称及描述和hostname 该接口支持企业项目细粒度权限的校验 具体细粒度请参见 ecs cloudServers put云服务器hostname修改后 需要重启
  • 面试官常问到的问题

    dom是什么 虚拟DOM又是什么 有何作用 谈谈你对vue的理解以及2和3的区别 双向数据绑定 数据类型有哪些 深拷贝和浅拷贝是什么 它们的区别是什么 组建通信了解吗 重绘和回流是什么 一般开发用什么布局 VUEX了解吗 说说它的五大属性及
  • react-native 屏幕尺寸和文字大小适配

    转载存档 现在的手机品牌和型号越来越多 导致我们平时写布局的时候会在个不同的移动设备上显示的效果不同 比如我们的设计稿一个View的大小是300px 如果直接写300px 可能在当前设备显示正常 但到了其他设备可能就会偏小或者偏大 这就需要