好问题。但是你这样做的方式不是“专业”开发人员会做的事情。单个 Activity 不需要 32 个布局,Android 足够智能来处理事情。
没有布局的多定义/dimens.xml 多设备支持的多定义是否可能?
是的,这是绝对可能的,这就是你应该做的。为单个 Activity 布局定义 32 个布局并不是一件好事。
假设我在 Play 商店中有一个相当大的应用程序,其中包含 20 多个活动,现在如果我为单个活动定义了 32 个布局,那么我的应用程序将有 600 多个布局。这可行吗?问问自己。
你需要先给 这个页面一个非常好的阅读。它几乎包含您需要知道的所有内容。但我会帮你把事情做好。
您不需要为屏幕尺寸和密度的每种组合提供替代资源。该系统提供了强大的兼容性功能,可以处理在任何设备屏幕上呈现应用程序的大部分工作,前提是您已使用允许其优雅调整大小的技术实现您的 UI
这句话足以让你相信你不应该这样做。Android 系统足够智能,可以相应地调整布局大小。相信我,它真的很好。
当您为不同的屏幕尺寸设计 UI 时,您会发现每种设计都需要最少的空间。因此,上面的每个通用屏幕尺寸都有一个由系统定义的相关最小分辨率。这些最小尺寸以“dp”为单位——与您在定义布局时应使用的单位相同
我将尝试指出您需要考虑的一些重要事项。
- 永远不要在布局中硬编码像素
- 始终在您的布局中使用
dp
或。sp
顾名思义,它们与不同设备的密度无关,因此在每个设备中看起来都一样。
- 始终使用
wrap_content
ormatch_parent
表示高度和宽度
- 永远不要使用
AbsoluteLayout
RelativeLayout
或者LinearLayout
两者都适合您,您只需要根据场景决定要使用哪一个
- 始终为不同的屏幕尺寸提供不同版本的可绘制对象。这是你不能跳过的。如果你不这样做,你的布局不仅在不同的设备上看起来很糟糕,而且会让你的应用消耗不必要的资源。
- 虽然单一布局也适用于平板电脑,但由于表格的屏幕尺寸比典型手机大得多,您应该只为它们提供单独的布局。
Android Studio 丰富的布局编辑器
Android Studio 有一个很棒的布局编辑器,您可以在其中即时预览您的布局。只需看下面的截图,
我正在以各种屏幕尺寸同时预览我的应用程序的特定屏幕,并且我的布局看起来就像我想要的那样,在所有这些屏幕中。
这个活动我只有两种布局,一种用于所有手机,一种用于所有平板电脑。
实践经验
如果您想要实际体验,我在 Play 商店中运行了一个应用程序,成千上万的用户在 8000 多种不同屏幕尺寸的不同设备上使用它。
我只有 2 种特定 Activity 的布局,一种用于手机,一种用于平板电脑。我的应用程序的用户界面在所有设备上看起来都不错,而且我从未收到任何用户的抱怨。如果您需要,这里是应用程序的链接。
我相信这个详细的答案可以澄清您的所有疑问,如果没有,请随时告诉我。我很乐意提供进一步的帮助。
UDPATE
我会再次尝试消除您的困惑。但首先,我建议您多次阅读我的答案。
您需要一种或两种布局,这完全取决于您正在设计的特定布局。所有布局都与其他布局不同。它不能在技术上被定义为它的主观性。没有经验法则。但我会尽量正式地帮助你。
您需要充分利用Android Studio 丰富的布局编辑器及其出色的实时预览功能。
首先尝试针对任何平均设备尺寸(如 5 英寸的 Nexus 5)设计布局。只需选择 Nexus 5 即可预览您的布局。
对设计感到满意后,选择其他屏幕尺寸进行预览。您也可以像上面的屏幕截图一样选择“预览所有尺寸”。
尝试查看您的布局在所有屏幕尺寸(从 4 英寸到 10 英寸的平板电脑)中是否看起来都不错。看看间距、图像大小、字体大小是否都正确。
从 4 英寸到 6 英寸的所有手机通常都会有完美的预览,但您可能需要为平板电脑屏幕单独设计另一种布局(因为它们足够大)。只有这里需要 2 种布局,但并非总是如此。
就像在我的应用程序中一样,我有 2 个单独的布局,仅用于 5-6 个活动,但对于其余的,我只有一个布局。这一切都取决于特定的布局。
设计与编程完全不同。编程可以正式和语法定义,但设计不能。设计是绝对主观的,取决于设计师的观点。以自己的方式发挥创意,这就是设计的魔力。