1

设想

我正在开发一个随机应用程序,最近我遇到了一个问题。我在 Google pixel 3a xl android 模拟器和 Asus X00TD 物理设备上运行相同的应用程序。而且我知道华硕手机的用户界面真的发生了变化。

Pixel 3a XL 显示器规格:

显示尺寸:6.0 英寸分辨率:2160 × 1080 ppi:402ppi

华硕 X00TD 显示器规格:

显示尺寸:6.0 英寸分辨率:2160 × 1080 ppi:403ppi

您会看到它几乎相同,只是 ppi 不同,我认为这不会产生很大的不同。大约 6 个像素会受到影响,这不会改变整个 UI。我不知道dpi华硕x00td的分辨率。而且我在网上也找不到。

这是像素 3a xl 和华硕 x00td 之间的 UI 差异。

6.0寸手机对比

如您所见,模拟器和实体手机之间存在很大差异。所以,我有2个问题

  1. 有一种方法可以通过函数计算 dpi。但是,如果我没有手机但仍想知道该手机的 dpi res 怎么办?

  2. 为什么模拟器和实体手机差别很大?

编辑

我试图在互联网上计算它,但它给了我0.0631mm点间距。我无法理解它是什么。模拟器还显示像素 3a xl 具有400dpi分辨率。

400dpi那么,和有什么区别0.0631mm dot pitch

我尝试过的解决方案

我试图通过将最小宽度设置为 360dp 来模拟模拟器中的华硕设备。最初它看起来和华硕一样。模拟器正在xhdpi挑选dimens.xml. 所以,我做了修改dimens.xmlxhdpi但是华硕没有选择那个文件。相反,它选择了xxhdpi文件。在另一台设备 Realme 3 pro 中使用。我无法修改xxhdpi文件,因为它会弄乱所有 6 英寸以上显示屏手机的 UI。同时华硕仍在挑选xxhdpi文件,华硕的用户界面一团糟。

找不到解决办法。

4

2 回答 2

1

这些差异是由制造商为这些设备设置的不同密度桶造成的。来自文档

用于超高密度 (xhdpi) 屏幕 (~320dpi) 的xhdpi资源。

用于超高密度 (xxhdpi) 屏幕 (~480dpi) 的xxhdpi资源。

请注意,您位于这些值的中间位置。看起来华硕决定将自己的 Androidxxhdpi配置xhdpi

在密度限定符下,您可以保留例如dimen,边距的大小或某些线条或边框的粗细。尤其是当您使用许多带有@android/android.R前缀的资源时,这些资源通常会根据存储桶进行高度参数化,例如,厚列表项分隔符可能0在设备上具有高度值,ldpi以便将其隐藏起来,从而在这种小/差的屏幕上为内容留出更多空间. 还使用不同的图像/可绘制对象来绘制。在右上角的图标上放一个红点,但仅在xxhdpi文件夹中,您会看到只有一个设备会获得此更改

开发人员设置中还有一个选项用于操作“最大宽度”,您可以在其中“更改密度”并尝试整个系统和应用程序的界面如何变化。当像素设置为至少 400 时,华硕的赌注设置为 ~360(四舍五入到 xx 桶,更接近 480)

于 2021-04-27T08:06:39.217 回答
0

正如 snachmsm 上面所解释的,布局限定符最有助于实现显示响应能力。

在我的情况下,华硕 x00td 没有正确显示内容。所以,要解决这个问题,

我使用了导致最小高度height的限定符值。因此,高度为或以上的设备将使用. 所以,华硕拿起了这个文件。除了我创建的文件之外,它的尺寸稍大一些,适用于像 realme 3 pro 这样的大型显示器。height600dpdimens.xml(h600dp)700dp

另外,我使用约束布局指南百分比来重新排列视图,以便自动调整边距。

因此,尺寸和大小由 dimens.xml 控制,边距由约束布局自动控制。

于 2021-04-28T09:55:49.210 回答