0

我创建了小米红米 3s (294dpi) 的 avd,其规格为:

在此处输入图像描述

在此处输入图像描述

Android 中的广义密度为:

  • Ldpi(低)~ 120 dpi -> dp = px * 0.74
  • Mdpi(平均)~ 160 dpi -> dp = px * 1
  • Hdpi(高)~ 240 dpi -> dp = px * 1.5
  • Xhdpi (extraalta) ~ 320 dpi -> dp = px * 2
  • Xxhdpi (extra extraalta) ~ 480 dpi -> dp = px * 3
  • Xxxhdpi (extra extraalta) ~ 640 dpi -> dp = px * 4

当我创建带有设备规格的avd时,分配的密度是xhdpi(x2),但实际设备密度因子小于x2,与大多数设备一样,因此预览结果与设备屏幕的实际外观不匹配。比如Nexus 5x也是一样,资源密度是xxhdpi(x3),但实际密度是2.63

在 Android Studio 中,Nexus 5x 或 Pixel XL 等模拟设备分别指定了 420dpi 和 560dpi 的特殊密度,其中密度因子约为 2.6 (xxhdpi) 和 3.5 (xxxhdpi)。

要确定我使用的小米红米 3S 的宽度 dp 及其密度系数:

dpi/160 = 密度像素值 294/160 = 1,8375

我用https://stackoverflow.com/a/5104104/4114846计算了真实密度

结果是294dpi的密度,实际密度因子是1.83,但是系统分配的资源文件夹是xhdpi(x2),预览对应的是广义密度。

如何通过指定设备的密度或其密度因子来创建 avd 和预览,使其看起来像实际设备?

如果你不能用 android studio 指定,我们有什么替代方案?

4

1 回答 1

6

找到您的 AVD 文件夹。

C:\users\<user>\.android\avd

打开设备的文件夹并编辑行:

hw.lcd.density=320

config.ini

虽然您计算了 294 ppi,但不允许使用 294。允许的值为:

120, 160, 213, 240, 280, 320, 360, 400, 420, 480, 560, 640

请注意,这些是密度:

0.75, 1, 1.33, 1.5, ...

请注意,1.33 不适合 ldpi、mdpi、hdpi、...的 Android 列表

它是必需的,因此 mdpi 和 hpdi 之间存在一个值。我怀疑有些硬件有 213 ppi 显示器,但硬件规格经常发生变化。今天的手机在保持相同像素数的同时变得越来越大,因此几年前的 4.5 英寸、213 ppi 手机已被 5 英寸、196 ppi 手机取代。

硬件工厂将逻辑密度设置为他们喜欢的任何数字,但如果明智的话,他们会将其设置为尽可能接近物理密度。因此,即使它实际上是 196,设备也会设置为 213。

不幸的是,这会导致您遇到的问题。由于您说物理屏幕尺寸的分辨率为 294 ppi,因此硬件很可能设置为密度 1.75 (280 ppi)。这比物理 ppi 低 5%,但设备通常会报告与物理密度不同的逻辑密度(例如,213 比 196 大 8%)。

因为 280 正好是 240 hdpi 和 320 xhdpi 之间的一半,所以我不知道它将如何缩放视图。模拟器可能会完美地呈现您的布局,但它可能使用 hdpi 文件夹中的可绘制对象。您的客户端的硬件可能会从 xhdpi 文件夹中选择可绘制对象,这会以非常不同的方式缩放它们。

于 2017-10-22T06:11:30.077 回答