如何使用 android studio 创建 avd 以预览真实设备?

yeb*_*iah 0 android android-virtual-device android-studio screen-density

我创建了小米红米 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(extraalta)~ 480 dpi -> dp = px * 3
  • Xxxhdpi (extra 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

我用/sf/answers/357287311/计算了实际密度

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

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

如果你不能用android studio指定,我们有什么选择?

小智 6

找到您的 AVD 文件夹。

C:\users\<user>\.android\avd
Run Code Online (Sandbox Code Playgroud)

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

hw.lcd.density=320
Run Code Online (Sandbox Code Playgroud)

config.ini
Run Code Online (Sandbox Code Playgroud)

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

120, 160, 213, 240, 280, 320, 360, 400, 420, 480, 560, 640
Run Code Online (Sandbox Code Playgroud)

请注意,这些是密度:

0.75, 1, 1.33, 1.5, ...
Run Code Online (Sandbox Code Playgroud)

请注意,1.33 不适合 ldpi、mdpi、hdpi、...

它是必需的,因此 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 文件夹中选择可绘制对象,这将非常不同地缩放它们。