Android 中的标准化屏幕尺寸

Normalized screen size in Android

在我的一项活动中,我想根据当前屏幕尺寸调整文本内容量。我应该依赖什么指标?

仅以像素为单位的宽度似乎不太可靠,因为字体缩放可能会有很大差异。另一方面,DisplayMetricsDENSITY_280, DENSITY_400 ... 似乎过于宽泛。是否有可用的标准化指标,例如 width_in_pixels * font_scaling?

以防万一:我的最低 SDK 版本是 15 (4.0.3)

您可以查看此 link 以了解如何 Supporting Multiple Screens on Android

秘诀在于在布局中使用 dp 单位。

  • px 是一个像素。
  • sp 是与比例无关的像素。
  • dp 是与密度无关的像素。

dp - 与密度无关的像素 - 一种基于屏幕物理密度的抽象单位。这些单位是相对于 160 dpi 屏幕而言的,因此 1 dp 是 160 dpi 屏幕上的一个像素。 dp-to-pixel 的比例会随着屏幕密度的变化而变化,但不一定成正比。注意:编译器接受 "dip" 和 "dp",尽管 "dp" 与 "sp".

更一致

你可以从 DisblayMetrics 得到像 dpi 这样的值,看这里 docs

此外,api、TypedValue.applyDimension() 中有一个针对不同大小指标的内置转换器,可用于从 sp 或 dp

获取像素

指定文本大小时,始终使用 sp:

<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />

更多详情here and here