为什么规定每英寸160点的显示器上 1dp = 1px?

先看 Google 的官方定义

在 160dpi 的屏幕上 1dp = 1px,160dpi 是系统为 mdpi 屏设定的基准密度。
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a ″medium″ density screen.

160dpi 是系统为 mdpi 屏设定的基准密度。
这个160dpi是系统定义的设备密度值,用于计算px与dp的换算系数(scale),不是物理密度
厂商甚至用户都可以修改这个设备密度。

dp 与 px 的换算系数(scale)就是通过设备密度除以基准密度160dpi得来的,是与物理密度无关的。

scale = density / 160
px = dp * scale

再看 基准密度mdpi,mdpi基于第一款 Android 设备 ″T-Mobile G1″ 的屏幕配置(缩放系数scale=1)

广义尺寸和密度是以 尺寸normal 和 密度mdpi 为基准设定的。
这个基准(normal,mdpi)是来自第一款 Android 设备 ″T-Mobile G1″ 的屏幕配置,它是 HVGA 屏(在 Android 1.6 之前唯一支持的屏幕配置)。
The generalized sizes and densities are arranged around a baseline configuration that is a normal size and mdpi (medium) density. This baseline is based upon the screen configuration for the first Android-powered device, the T-Mobile G1, which has an HVGA screen (until Android 1.6, this was the only screen configuration that Android supported).

在 Android 1.6 之前没有设备密度的概念,也没有dp的概念,只支持HVGA屏(320x480),缩放系数为 1。

在 Android 1.6(API LEVEL 4) 支持多屏适配时,将设备密度分成了3个级别(ldpi/120,mdpi/160,hdpi/240)。
因此基准为 mdpi,160dpi,scale=1

你可能感兴趣的:(为什么规定每英寸160点的显示器上 1dp = 1px?)