使用ConstraintsLayout设计不同屏幕尺寸的界面布局

4

我已开始深入研究今年IO发布的 Constraints Layout。这看起来非常有前途,可以使您的布局非常高效。我已经看过谷歌提供的 codelab 练习。然而,我有以下几个问题希望解决。

  1. 如何使用 ConstraintLayout 设计不同屏幕大小的布局?

目前,我设计布局并为特定设备/屏幕组设置视图的边距和填充等。将这些值保存在 dimens.xml 文件中。这是一种非常痛苦的设计布局的方法。Android 的 ConstraintsLayout 是否也像 iOS 的 AutoConstraintsLayout 一样可以用于设计多个屏幕?

  1. 为不同的屏幕方向设计布局是否仍需要不同的 Layout.xml 文件,例如 layout_landscape.xmllayout_portraint.xml
2个回答

2
是的,ConstraintLayout(以及任何 Android 布局自 Android 1.0 起)的整个目的是能够处理不同的屏幕(尺寸、密度等)。您无需做任何特殊操作(除了指定小部件之间的约束)。
如果您想为不同的屏幕尺寸设计,请将边距视为“最小”间距,并创建小部件之间的约束,以便将小部件相对于其他小部件定位。
您还可以使用指南和偏置居中,这样可以给您带来很大的灵活性。
关于屏幕方向,完全由您决定 - 如果您什么也不做,则定义的布局将应用于任何方向。所以它会“工作”。但通常情况下,您希望在纵向和横向之间有一个不同的用户界面。在这种情况下,您确实可以创建两个布局文件,通常的系统会为您选择正确的那一个。
最后,您可以通过更改 Android Studio 弹出窗口中的当前屏幕定义来轻松测试您正在处理的布局在不同屏幕/设备上的行为:

Screeen popup

您还可以使用调整大小手柄将布局查看为任意屏幕尺寸。

enter image description here


这并没有真正回答关于在Android Studio中我们是否需要在每个设备上通过试错来找到每个视图的尺寸,还是像XCode一样只需定义约束条件的问题。 - Umer Farooq
我不确定我理解你的问题--视图的尺寸可能会改变(语言、主题...),但这就是为什么你要使用约束将视图相对定位,是吗。 - Nicolas Roard
@NicolasRoard并非所有设备的DP大小都相同。例如,Nexus S小于360dp,而Pixel XL大于500dp。因此,如果您使用约束布局为Nexus S设置边距和填充,以使布局完全适合屏幕,则相同的布局在Pixel XL下方会有额外的空间,反之亦然。因此,是的,我们要创建value-sw360dp、value-sw400dp、value-sw450dp等值,并在每个中放置具有适当缩放值的dimens.xml,否则我可能会错过一个明显简单的解决方案,这就是OP所问的。 - Ankit
@NicolasRoard 有趣的是,我找到了克服我面临的问题的方法和指南,至少大部分问题都解决了。 - Ankit

1
如果你指的是不同的屏幕,比如手机和平板电脑,那么你需要为它们创建不同的布局。一种方法是定义layout-sw360dplayout-sw600dplayout-sw720dp。你可能想要了解chains and guidelines。是的,设计不同方向的屏幕布局仍然需要不同的Layout.xml文件,即layout_landscape.xml和layout_portraint.xml。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接