Android开发Android技术知识

屏幕适配前置技能

2018-12-31  本文已影响0人  wmjwmj

如果你还不懂屏幕适配,大概是缺点前置技能了

  1. 分辨率、屏幕尺寸、dpi
    dp转px
    dp存在的问题?
    density和dpi

  2. 获取分辨率
    获取density和dpi

px

像素。构成影像的基本单位

分辨率、屏幕尺寸、dpi

分辨率:横向、纵向上的像素总数,单位px。如1920x1080
屏幕尺寸:手机对角线的物理尺寸,单位英寸(inch)。如5.5inch
dpi:像素密度,每英寸(对角线)的像素点数,单位dpi

计算屏幕密度:
分辨率=1920x1080,屏幕尺寸=5.5inch,像素密度=(√1920^2+1080^2)/5.5=400dpi

dp转px

dp: 独立像素密度。android中会在渲染前将dp转为px,计算公式:px = dp * (dpi / 160)

dpi=160 -> 1dp=1px
dpi=240 -> 1dp=1.5px
dpi=320 -> 1dp=2px
...
像素密度越大,1dp对应的像素就越多

dp存在的问题?

假设设计图的尺寸按宽度是360dp设计

以分辨率=1920x1080,屏幕尺寸=5.5inch,像素密度=(√1920^2+1080^2)/5.5=400dpi的手机为例
根据公司屏幕宽度=1080/(400/ 160)=432dp
结论:实际宽度比设计图宽度还大

如果手机的屏幕宽度更小

如720/(400/160)=288dp
结论:实际宽度比设计图宽度还小,就会导致显示不全

density和dpi

density :密度。android中以160dpi为基准,计算公式:density = dpi / 160

dpi=160 -> density=1
dpi=240 -> density=1.5
dpi=320 -> density=2

获取分辨率

// 屏幕宽(像素,如:480px)  
int screenWidth  = getWindowManager().getDefaultDisplay().getWidth();       
// 屏幕高(像素,如:800px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();       

获取density和dpi

DisplayMetrics dm = getResources().getDisplayMetrics();  
// 密度(如:1.0/1.5/2.0)  
float density  = dm.density; 
// 像素密度(如:160/240/320)        
int dpi = dm.densityDpi;     
上一篇 下一篇

猜你喜欢

热点阅读