与不同 resolutions/inches 的兼容性

Compatibility with different resolutions/inches

我正在开发一个应用程序,但我的约束布局与任何屏幕尺寸都不兼容。

我有一个具有以下宽度和高度的按钮:

android:layout_width="283dp"
android:layout_height="57dp"

Here's 使用 Google 像素时的外观。 here's 使用 Nexus S 时的效果

我还把 apk 发给了一个拥有 Galaxy J7 (1280x720, 5.5') 的人,但我的按钮、文本视图和图像视图不适合屏幕,就像 Nexus S (800x480, 4 ').

阅读文档和其他资源后,我了解到我可以为不同的屏幕(例如,hdpi,Nexus S 就是这种情况)创建不同的布局。

但看起来问题更多地与显示英寸相关,而不是与设备 dpi 相关。 因为 Nexus S 具有 800x480、hdpi 和 4' 屏幕。但是,当我更改为 800x480、mdpi 和 5.1' 屏幕(多 1.1' 英寸)时,它 looks 比 Nexus S 好得多,即使 dpi (mdpi) 较低也是如此。它看起来也比 Galaxy J7 真实设备更好,即使屏幕尺寸 (5.1' x 5.5') 和分辨率(800x480 对 1280x720)更小。

那么,它如何适合 800x480 5.1' mdpi 屏幕,而不适合 1280x720 5.5' Galaxy J7 和 800x480 4.0' hdpi 屏幕 (Nexus S)?

此外,如果我创建了一个与 Galaxy J7 真实设备(1280x720 和 5.5')屏幕规格相同的虚拟设备,它非常适合,与真实设备不同 phone。

这些图片没问题,本身不是问题。这通常是您手动设置宽度和高度时发生的情况。

您能做的最好的事情是设置正确的约束,然后将宽度 and/or 高度设置为 0dp。这将使您的视图在不破坏任何约束的情况下尽可能地扩展。这样你仍然会得到不同的宽度和高度,但希望不太明显。

请注意,如果您将顶部和底部约束设置为父级,并将高度设置为 0dp,它将扩展以填充其约束,它将填满整个父级。

对于定位,您可以根据需要使用指南。在每个 phone 中,50% 的水平参考线将位于屏幕中间。所以你也可以限制视图。

您可以用更具响应性的内容替换固定大小(您当前为视图提供的内容)。

如果这是您的无响应按钮:

<Button
android:layout_width="200dp"
android:layout_height="400dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

只需将其替换为:

<Button
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintWidth_percent="0.3"
    app:layout_constraintHeight_percent="0.5"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

对于每phone,此按钮会根据屏幕大小进行调整,并会占用30% 的屏幕宽度和50% 的屏幕宽度。 这就是您如何让一个屏幕响应所有屏幕尺寸,而不是为不同的屏幕创建大量布局。

我建议你使用 Adob​​e XD 并使用它来确定大小

android:layout_width="283dp"
android:layout_height="57dp"

然后提取所有尺寸的图片 然后使宽度和高度wrap_content 在 XML 文件中