zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android 设备兼容与适配

Android设备 兼容 适配
2023-09-27 14:27:35 时间

dp:虚拟像素单位,1 dp 约等于中密度屏幕(160dpi;“基准”密度)上的 1 像素

px:屏幕像素

sp:缩放像素 (sp)(切勿将 sp 用于布局尺寸),默认情况下,sp 单位与 dp 大小相同,但它会根据用户的首选文本大小来调整大小

1.将 dp 单位转换为像素单位

在某些情况下,您需要以 dp 表示尺寸,然后将其转换为像素。dp 单位转换为屏幕像素很简单:

px = dp * (dpi / 160)

*DisplayMetrics.density 字段根据当前像素密度指定将 dp 单位转换为像素时所必须使用的缩放系数。在中密度屏幕上,DisplayMetrics.density 等于 1.0;在高密度屏幕上,它等于 1.5;在超高密度屏幕上,等于 2.0;在低密度屏幕上,等于 0.75。此数字是一个系数,用其乘以 dp 单位,即可得出当前屏幕的实际像素数。

获取 Android 系统常用的距离:ViewConfiguration

可通过 getScaledTouchSlop() 来获取框架用作滚动阈值的距离(以像素为单位)

 ViewConfiguration.get(mContext).getScaledTouchSlop();

2. 适用于不同像素密度的配置限定符

密度限定符说明
ldpi适用于低密度 (ldpi) 屏幕 (~ 120dpi) 的资源。
mdpi适用于中密度 (mdpi) 屏幕 (~ 160dpi) 的资源(这是基准密度)。
hdpi适用于高密度 (hdpi) 屏幕 (~ 240dpi) 的资源。
xhdpi适用于加高 (xhdpi) 密度屏幕 (~ 320dpi) 的资源。
xxhdpi适用于超超高密度 (xxhdpi) 屏幕 (~ 480dpi) 的资源。
xxxhdpi适用于超超超高密度 (xxxhdpi) 屏幕 (~ 640dpi) 的资源。
nodpi适用于所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度是多少,系统都不会缩放以此限定符标记的资源。
tvdpi适用于密度介于 mdpi 和 hdpi 之间的屏幕(约 213dpi)的资源。这不属于“主要”密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。如果您发现有必要提供 tvdpi 资源,应按一个系数来确定其大小,即 1.33*mdpi。例如,如果某张图片在 mdpi 屏幕上的大小为 100px x 100px,那么它在 tvdpi 屏幕上的大小应该为 133px x 133px。

您应遵循六种主要密度之间的 3:4:6:8:12:16 缩放比。例如,如果您有一个可绘制位图资源,它在中密度屏幕上的大小为 48x48 像素,那么它在其他各种密度的屏幕上的大小应该为

  • 36x36 (0.75x) - 低密度 (ldpi)
  • 48x48(1.0x 基准)- 中密度 (mdpi)
  • 72x72 (1.5x) - 高密度 (hdpi)
  • 96x96 (2.0x) - 超高密度 (xhdpi)
  • 144x144 (3.0x) - 超超高密度 (xxhdpi)
  • 192x192 (4.0x) - 超超超高密度 (xxxhdpi)