详解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 相关文章推荐
VBS通过WMI监视注册表变动的代码
Oct 27 Javascript
javascript:;与javascript:void(0)使用介绍
Jun 05 Javascript
jQuery新的事件绑定机制on()示例应用
Jul 18 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
微信小程序-getUserInfo回调的实例详解
Oct 27 Javascript
Vue.js最佳实践(五招助你成为vuejs大师)
May 04 Javascript
解决vue中监听input只能输入数字及英文或者其他情况的问题
Aug 30 Javascript
angular 未登录状态拦截路由跳转的方法
Oct 09 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
微信小程序图片自适应实现解析
Jan 21 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 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 存取 MySQL 数据库的一个例子
2006/10/09 PHP
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
2009/05/28 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
2014/07/08 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
jQuery 获取对象 基本选择与层级
2010/05/31 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
浅谈jQuery中replace()方法
2015/05/13 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
Vue.js实现一个todo-list的上移下移删除功能
2017/06/26 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
2019/06/18 Javascript
javascript实现留言板功能
2020/02/08 Javascript
浅谈Python单向链表的实现
2015/12/24 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
python将回车作为输入内容的实例
2018/06/23 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
在pycharm中文件取消用 pytest模式打开的操作
2020/09/01 Python
Darphin迪梵官网: 来自巴黎,植物和精油调制的护肤品牌
2016/10/11 全球购物
阿里云:Aliyun.com
2017/02/15 全球购物
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
How to spawning asynchronous work in J2EE
2016/08/29 面试题
高中体育教学反思
2014/01/29 职场文书
村干部培训班主持词
2014/03/28 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
体育教师研修感悟
2015/11/18 职场文书