一、像素密度
像素密度指手机屏幕一点尺寸区域内像素的个数,在Android中,使用没英寸像素密度(dpi)表示手机屏幕的像素密度,dpi的换算方式为:
步骤1:计算得到手机屏幕的斜角像素长度:
步骤2:使用屏幕斜角像素长度去除上手机屏幕尺寸得到dpi
在Android当中一般讲手机屏幕按每英寸像素密度的值分为:0~120dpi~160dpi~240dpi~320dpi~480dpi~640dpi等几个区间,分别以ldpi、mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi
在160dpi的屏幕上,1dp = 1px 1dp = 像素密度/160 * 1px
二、修改像素密度
当UX设计是在固定长款通过dp单位进行设置的,通过修改当前屏幕的像素密度进行缩放
density 像素缩放比例 如果是像素密度160dpi 值为1,如果屏幕像素密度是320dpi,则值为2
scaleDensity 字体缩放比例一般等于density
densityDpi 屏幕像素密度 160 320等
View 尺寸无论设置的是dp、sp 最终都转换为px显示
不同的设备的density可能不一样,同分辨率density也可能不同
// 获取当前app的屏幕显示信息
// 屏幕像素密度
priavte float appDensity;
// 字体缩放比例
private float appScaleDensity
// 参考设备的宽,单位是dp
private static final flat flat WIDTH = 360;
DispalyMetrics displayMetrics = context.getResource().getDisplayMetircs();
appDensity = displayMetrics.density;
appScaleDesity = displayMetrics.scaleDensity
// 计算目标density scalDensity densityDpi
float targetDensity = displayMetric.widthPixels / WIDTH; // 如果在1080dp上等于3.0
float targetScaleDensity = targetDensity * (appScaleDensity / appDensity); // appScaleDensity 默认等于appDensity
int targetDensityDpi = targetDensity * 160;
// 替换acitivity 的 density scaleDensity densityDpi
DisplayMetric dm = activity.getResource().getDisplayMetic();
dm.density = targetDenity;
dm.scaleDensity = targetScaleDensity;
dm.densityDpi = targetDensityDpi;