Android之长度单位px,dip,sp,dpi

Android之长度单位px,dip,sp,dpi

1.关于四个单位的介绍

1.px---------像素(pixel)
比如我们的手机的分辨率是1080*2340像素,也就代表着我们的手机宽有1080个像素点,即1080像素,高有2340个像素点

2.dip(dp)-------密度无关像素(Density independent pixel)
dip就是我们在程序中应用的dp,在每英寸160px的显示器上,1dp = 1px

3.dpi-----------像素密度(Dots per Inch)
这个单位代表着我们的屏幕每英寸的像素点数,1英寸 == 2.54cm,这个单位也是我们通配符的单位,比如ldpi是120,mdpi是160,hdpi是240,xhdpi是320。
4.sp----------放大像素(scaled pixels)
与dp类似,主要用于字体显示

2.这些单位之间的关系

  1. 当屏幕的dpi=480 那么1dp = 480 / 160 = 3px

  2. 1sp = 1dp * scale
    当屏幕的字体大小为默认字体时 sacle == 1.0, 如果我们改变了系统字体的大小,这时的scale的值就会发生变化.

3.如何在程序中得到px和dp的换算比例和scale的值
  1. px和dp的换算比例
    float scaledDensity = getResources().getDisplayMetrics().scaledDensity;
    如果这个值scaledDensity得出来是2,75, 那么这个屏幕1dp = 2.75像素
  2. scale的值
    float fontScale = getResources().getConfiguration().fontScale;
    如果这个值fontScale得出来是1.5,那么这个屏幕的 1sp = 1dp * 1.5 = 1.5dp
4.如果一个宽度为wrap_content的TextView的宽度

如果你想着得到当前字体的大小乘当前文本字体的长度,那就太天真了
在这里插入图片描述

你会发现不同的字符的宽度是不一样的

正确的姿势如下

CharSequence title = getContext().getResources().getText(resId);
TextPaint paint = mTitleView.getPaint();
 float titleWidth = Layout.getDesiredWidth(title, 0, title.length(), paint);

这样就避免了不同字符集导致计算长度不准确的问题.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值