react-native屏幕适配文本间距适配(七)

react-native屏幕适配文本间距适配

react native提供了一个类似于手机web端的媒体查询API模块PixelRatio,同时也提供了一个Dimensions原生API,可以利用这两个API模块实现屏幕适配

思路:

1.文本缩放适配

  • 获取设备的像素密度
  • 获取屏幕的宽度dp
  • 字体大小缩放比例
  • 根据dp值获取屏幕实际的像素值
  • 计算实际屏幕像素与设计稿的宽度像素值比率
  • 计算文字dp值:
    设计稿文本像素值  *  屏幕像素与设计稿的宽度像素值比 / 字体大小缩放比例 + 0.5

2.元素宽高适配

  • 获取屏幕实际像素值
  •  获取设备的像素密度
  • 计算实际屏幕像素与设计稿的宽度像素值比率
  • 计算元素的宽度:
    设计稿元素宽度*屏幕像素与设计稿的宽度像素值比/像素密度 + 0.5
    等式:元素的宽度(dp)* 设计稿总宽度(px) =  设计稿元素宽度(px)* 屏幕的总宽度(dp) 

完整代码:

let ReactNative = require('react-native');
// 获取屏幕的dp
let Dimensions = require('Dimensions');
let screenW = Dimensions.get('window').width;
let screenH = Dimensions.get('window').height;
let fontScale = ReactNative.PixelRatio.getFontScale();
let pixelRatio = ReactNative.PixelRatio.get();
// 高保真的宽度和告诉
const designWidth = 720.0;
const designHeight = 1280.0;

// 根据dp获取屏幕的px
let screenPxW = ReactNative.PixelRatio.getPixelSizeForLayoutSize(screenW);
let screenPxH = ReactNative.PixelRatio.getPixelSizeForLayoutSize(screenH);

/**
 * 设置text
 * @param size  px
 * @returns {Number} dp
 */
export function st(size) {
    var scaleWidth = screenW / designWidth;
    var scaleHeight = screenH / designHeight;
    var scale = Math.min(scaleWidth, scaleHeight);
    size = Math.round(size * scale/fontScale + 0.5);
    return size;
}

/**
 * 设置高度
 * @param size  px
 * @returns {Number} dp
 */
export function sh(size) {
    var scaleHeight = size * screenPxH / designHeight;
    size = Math.round((scaleHeight / pixelRatio + 0.5));
    return size;
}

/**
 * 设置宽度
 * @param size  px
 * @returns {Number} dp
 */
export function sw(size) {
    var scaleWidth = size * screenPxW / designWidth;
    size = Math.round((scaleWidth/pixelRatio + 0.5));
    return size;
}
//注以上代码来自简书,超链接丢失

使用时一般考虑根据横向等比例缩放 ,所以使用方法就是 利用设计稿的原始像素来计算dp值:

例如:fontSize:st(size:px)  width:sw(size:px)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值