详解React Native 屏幕适配(炒鸡简单的方法)


Posted in Javascript onJune 11, 2018

前言

React Native 可以开发 ios 和 android 的 app,在开发过程中,势必会遇上屏幕适配(ios 好几种尺寸的屏幕以及 android 各种尺寸的屏幕)的问题,下面介绍一种几行代码搞定 RN 适配的方法!

屏幕适配的前置知识

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

原理

虽然单位不同,但是元素所占屏幕宽度的比例是相同的
利用元素所占屏幕比例不变的特性,来将 px 转为 dp(这样实现屏幕适配的话,在不同尺寸的屏幕下,元素会等比放大或缩小)

公式如下:

设计稿元素宽度(px) / 设计稿总宽度(px) = 元素的宽度(dp) / 屏幕的总宽度(dp)

我们要求的就是 元素的宽度(dp)

可以得出:

元素的宽度(dp) = 设计稿元素宽度(px)* 屏幕的总宽度(dp) / 设计稿总宽度(px)

代码实现

// util.js
import { Dimensions } from 'react-native';

// 设备宽度,单位 dp
const deviceWidthDp = Dimensions.get('window').width;

// 设计稿宽度(这里为640px),单位 px
const uiWidthPx = 640;

// px 转 dp(设计稿中的 px 转 rn 中的 dp)
export const pTd = (uiElePx) => {
 return uiElePx * deviceWidthDp / uiWidthPx;
}

使用

每次给元素设置尺寸样式时,使用 pTd() 函数即可(传入设计稿中元素的实际 px)。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript实现的分页函数
Dec 22 Javascript
JS对URL字符串进行编码/解码分析
Oct 25 Javascript
JQuery实现table行折叠效果以JSON做数据源
May 26 Javascript
针对JavaScript中this指向的简单理解
Aug 26 Javascript
jQuery动态改变多行文本框高度的方法
Sep 07 Javascript
JavaScript实现url参数转成json形式
Sep 25 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
Sep 19 jQuery
vue路由跳转时判断用户是否登录功能的实现
Oct 26 Javascript
webpack dll打包重复问题优化的解决
Oct 10 Javascript
JS实现数组去重及数组内对象去重功能示例
Feb 02 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
vue非父子组件通信问题及解决方法
Jun 11 #Javascript
Angular如何在应用初始化时运行代码详解
Jun 11 #Javascript
详解.vue文件解析的实现
Jun 11 #Javascript
vue filters的使用详解
Jun 11 #Javascript
Vue组件全局注册实现警告框的实例详解
Jun 11 #Javascript
jQuery实现的页面详情展开收起功能示例
Jun 11 #jQuery
Node.js中的cluster模块深入解读
Jun 11 #Javascript
You might like
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP数组内存利用率低和弱类型详细解读
2017/08/10 PHP
js 学习笔记(三)
2009/12/29 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
jQuery插件formValidator实现表单验证
2016/05/23 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
Python算法应用实战之栈详解
2017/02/04 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python获取系统所有进程PID及进程名称的方法示例
2018/05/24 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
python爬虫请求头设置代码
2020/07/28 Python
matplotlib 三维图表绘制方法简介
2020/09/20 Python
Python类的继承super相关原理解析
2020/10/22 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
python包的导入方式总结
2021/03/02 Python
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
瑞士首家网上药店折扣店:McDrogerie
2020/12/22 全球购物
口腔医学技术应届生求职信
2013/11/09 职场文书
2014年教师政治学习材料
2014/06/02 职场文书
岁月神偷观后感
2015/06/11 职场文书
分析MySQL抛出异常的几种常见解决方式
2021/05/18 MySQL
动画「进击的巨人」第86话播出感谢绘公开
2022/03/21 日漫
教你部署vue项目到docker
2022/04/05 Vue.js