屏幕中的值
屏幕适配涉及到 3个常见的变量 density,scaleDensity,DensityDpi,同时 适配也分为资源适配,尺寸适配;
资源适配→ 根据 densityDpi 选择不同 drawable-xxxhdpi 目录
尺寸适配 → dp / sp 最终通过 densityDpi 推导出来的 density / scaledDensity 转换成 px
所以屏幕适配的核心其实是 densityDpi** ,而** density / scaledDensity 是它的计算结果
根据屏幕的尺寸以及屏幕的分辨率,获取到对应的资源尺寸的计算公式;
计算公式
根据 density/dpi 选择对应的图片
| 目录名 | 对应 densityDpi | density 值 | 倍率(相对 mdpi** )** |
|---|---|---|---|
| drawable-ldpi | ~120 dpi | 0.75 | 0.75x |
| drawable-mdpi | ~160 dpi | 1.0 | 1x(基准) |
| drawable-hdpi | ~240 dpi | 1.5 | 1.5x |
| drawable-xhdpi | ~320 dpi | 2.0 | 2x |
| drawable-xxhdpi | ~480 dpi | 3.0 | 3x |
| drawable-xxxhdpi | ~640 dpi | 4.0 | 4x |
| drawable-nodpi | 无关密度,原始大小 | - | 不缩放 |
对应的设计稿的图片大小
| 目录 | 尺寸(px) | 说明 |
|---|---|---|
| drawable-ldpi | 24 × 24 | 1/4 |
| drawable-mdpi | 32 × 32 | 1/3 |
| drawable-hdpi | 48 × 48 | 1/2 |
| drawable-xhdpi | 64 × 64 | 2/3 |
| drawable-xxhdpi | 96 × 96 | 1x(基准) |
| drawable-xxxhdpi | 128 × 128 | 4/3 |
density,scaledDensity,densityDpi的作用:
1.density:density = dpi / 160 表示 屏幕密度因子,是 像素(px)与 dp 单位的换算比例。
2.scaledDensity:scaledDensity = 字体缩放因子 * density 是 专门用来处理 sp(scale-independent pixel)字体大小 的。作用:文字单位 sp 的换算公式;
3.densityDpi:densityDpi = density * 160 表示屏幕的 dpi(dots per inch,像素密度) 。作用: Android 会根据 densityDpi 自动选择 drawable-mdpi、drawable-xhdpi 等资源目录。
简单理解:
density决定了 界面大小适配,scaledDensity决定了 文字随系统字体缩放,densityDpi决定了 系统选用哪一套资源(mdpi, xhdpi…) 。