Android 屏幕分辨率 计算单位

参考地址:点击打开链接1点击打开链接2

一、常用的单位:

相对单位主要有:px、sp、dp</p>

绝对单位主要有:pt、in、mm

px:pixels

sp:Scale-independent pixels

dp:device independent pixels(设备独立像素)

pt:point

in:inch

mm:毫米

二、单位应用总结:一般用相对单位,而不是绝对单位

1、字体的大小一般使用SP,用此单位的字体能够根据用户设置字体的大小而自动缩放

2、空间等相对距离一般使用dp(dip),随着密度变化,对应的像素数量也变化,但并没有直接的相对比例的变化。

3、px与实际像素有关,及与密度有关!dp和sp和实际像素没有关系,对于一定分辨率但不同密度的屏幕,px单位的应用可能会导致长度的相对比例的变化。

三、密度与分辨率:

密度值表示每英寸有多少个显示点,与分辨率是两个概念。

其屏幕密度标准是:HVGA屏density=160;QVGA屏density=120;WVGA屏density=240;WQVGA屏density=120

具体的应用运算关系:假设分辨率是 x*y, 密度为 d, 屏幕实际大小为 a*b那么关系为 x*y = d * a * b (约等于)

不同density下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)为例density=120时 屏幕实际分辨率为240px*400px (两个点对应一个分辨率)

四、对比总结:

1、在相同密度(即同一实体屏幕)不同分辨率的情况下,与实体密度无关的相对单位sp和dp显示正常

2、在相同分辨率不同密度的情况下,因为一般情况下,都用的标准密度,所以分析的意义不是很大

五、下面不同单位的相互转换:

说明:PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数

举个简单的列子,iphone5的ppi是多少?ppi=√(1136px²+ 640px²)/4 in=326ppi(视网膜Retina屏)

(1)距离单位

<span style="white-space:pre">	</span>public static int dip2px(Context context, float dipValue) {
<span style="white-space:pre">		</span>final float scale = context.getResources().getDisplayMetrics().density;
<span style="white-space:pre">		</span>return (int) (dipValue * scale + 0.5f);
<span style="white-space:pre">	</span>}


<span style="white-space:pre">	</span>public static int px2dip(Context context, float pxValue) {
<span style="white-space:pre">		</span>final float scale = context.getResource().getDisplayMetrics().density;
<span style="white-space:pre">		</span>return (int) (pxValue / scale + 0.5f);
<span style="white-space:pre">	</span>}

dp和px的换算公式 :dp*ppi/160 =px

比如,在一个240ppi的屏幕里,比如1dp x 240/160 = 1.5px。 即 1dp=1.5px,

mdpi: 1.0   (baseline

(160ppi) )    1dp=px

hdpi: 1.5    (240ppi)                   1dp=1.5px

xhdpi: 2.0  (320ppi)                   1dp=2px

xxhdpi3.0  (480ppi)                   1dp=3px

把dp 转化为px  公式为:

dp乘以每个密度下面的系数比值


(2)字体单位





六、获取屏幕分辨率和屏幕密度的方法:

<span style="white-space:pre">	</span>WindowManager windowManager = getWindowManager();    
        Display display = windowManager.getDefaultDisplay();    
        int screenWidth = screenWidth = display.getWidth();    
        int screenHeight = screenHeight = display.getHeight();   
        float scale = MainActivity.this.getResources().getDisplayMetrics().density;
        UIUtil.showMessage(MainActivity.this, screenWidth+"--"+screenHeight+"--"+scale);	



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值