我想在图像背景上的预定义位置放置一组视图。
像这样:
我可以使用顶部/左侧边距或 android:TranslationX/android:TranslationY 在 XML 中设置每个咖啡杯视图的位置。
当应用程序在不同尺寸的屏幕上启动时,我的背景层将拉伸到新布局,但是如何更改视图的顶部/左侧边距?
理想情况下,我只需在 XML 中将每个视图的位置标记为距父级左侧 x% 和距父级顶部 y% 的位置。(动画可以像这样工作)。该选项似乎不可用。
我考虑过的一些探索:
使用布局权重。如果我只对垂直或水平位置感兴趣,这将解决问题,但我看不到如何同时做这两个。
针对特定的参考屏幕尺寸进行设计,使用边距来定位杯子,然后在运行时缩放视图的顶部/左侧边距。这涉及在运行时读取起始边距并将其重置为参考屏幕的一部分。如果我的参考屏幕是 1000 像素宽并且我在 750 像素宽的屏幕上运行,我可以读取 layoutParams,将左边距乘以 (750/1000),然后将生成的左边距写回布局。但是 getLayoutParams 并没有给我一个有边距的对象。
我最接近这项工作的是设置 android:translationX 和 android:translationY。原则上,将这些值设置为在 XML 中的参考屏幕上工作(比如 10.1" 平板电脑)并将这些值缩放到实际使用的设备应该是一件简单的事情。我无法通过这种方式获得合理的结果。通过试用-and-error 我发现在 XML 中为 Galaxy 10.1" 选项卡设置原始值并在 Galaxy nexus(横向)上运行时,我必须将900 添加到 getTranslationX/Y() 中的值,因此生成的图标正确出现。但是 900 只是一个任意数字,当然添加它们会破坏 10.1" 选项卡上的位置,所以这不是一个解决方案。
XML 或编程解决方案都可以。