Android UI 应该如何变化?密度 (DPI) 明智还是根据屏幕尺寸?要遵循的最佳实践?

How Android UI should vary? Density (DPI) wise or as per screen size? Best practice to follow?

我正在为手机和平板设备开发应用程序。在下面的屏幕截图中,我将按钮大小应用为 android:layout_width="200dp" android:layout_height="80dp"。当我 运行 我的应用程序在平板电脑 (mdpi) 和其他两个移动设备 (hdpi) 和 (xhdpi) 按钮大小因所有三个设备的密度不同而不同。

参考下图分别有tablet(mdpi)、nexus mobile(hdpi)和galaxy nexus mobile(xhdpi)模拟器:

我还检查了所有 3 台设备上的 Gmail 应用程序:

由于平板电脑体积较大,但密度(mdpi)最低,因此与其他尺寸相对较小且密度较高的设备相比,平板电脑中的UI看起来更小。

如果我想让按钮在平板电脑上看起来更大,我需要通过在 values-sw360dpvalues-sw480dpvalues-sw600dp 等中添加不同的尺寸来更改高度和宽度

我的问题是,我们的 UI 应该根据屏幕尺寸看起来更大,还是让它根据密度变化?遵循哪个最佳实践?

对此没有具体的指导方针,我相信也没有最佳实践。

就个人而言,我允许 UI 根据屏幕尺寸看起来更大,因为这与 phone 上的大多数其他应用程序的行为相同。如果我注意到文本被截断,我只会调整这些较大尺寸的 dp 和 sp 值。

但是,由于没有最佳做法,因此这确实取决于个人选择。我更喜欢保持 UI 与设备上的其他应用程序相似,这些应用程序也会放大。

但我知道其他开发人员更愿意保持 UI 一致。如果你选择这样做,你可以考虑使用这两个库:

我认为最好的做法是使用 ConstraintLayout 为所有屏幕尺寸设置一种布局。
当您在视图上使用固定尺寸时,例如 android:layout_width="200dp" android:layout_height="80dp" 您的布局不会响应所有屏幕尺寸。

如果您希望您的布局在所有不同的物理屏幕上完全相同,请使用 constaintLayout。

来自文档:

ConstraintLayout allows you to create large and complex layouts with a flat view hierarchy (no nested view groups). It's similar to RelativeLayout in that all views are laid out according to relationships between sibling views and the parent layout, but it's more flexible than RelativeLayout and easier to use with Android Studio's Layout Editor.