繁体   English   中英

Android | 为什么在具有相同分辨率和相同屏幕尺寸的两部不同手机上,活动看起来会有所不同?

[英]Android | Why do activity look different on two different phones with same resolution as well as same screen size?

设想

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

Pixel 3a XL 显示器规格:

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

华硕 X00TD 显示器规格:

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

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

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

6.0寸手机对比

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

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

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

编辑

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

那么, 400dpi0.0631mm dot pitch有什么区别?

我尝试过的解决方案

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

找不到解决办法。

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

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

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

请注意,您位于这些值的中间位置。 看起来华硕决定将自己的 Android 配置为xxhdpi ,因此界面可以扩展到更大的 UI 元素(也使用更大的图像),而 Google 设置了xhdpi限定符,使自己的界面“更易于打包”,具有更小的 UI 元素和图标

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

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

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

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

我使用了heightheight限定符值,这导致了最小高度。因此,高度为600dp或更高的设备将使用dimens.xml(h600dp) 所以,华硕拿起了这个文件。 我还为700dp创建了文件,该文件的尺寸稍大一些,适用于 realme 3 pro 等大型显示器。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM