Android: 替代AbsoluteLayout的方案(我确实需要绝对定位)

3
我正在尝试编写一个日历应用程序,我计划使用网格(周视图),这可能是一个TableLayout,并且直接在其上方绝对定位网格上的事件。
但是,AbsoluteLayout已被弃用。我应该使用什么替代方法呢?
事件可能会重叠,我认为试图使用非绝对布局来实现我想要的效果是非常愚蠢的。
也许我应该在每个子节点上使用RelativeLayout和左侧边距以及顶部边距。这种方式似乎很奇怪,可能不太有效率。这是最好的方法还是有其他替代方法?
3个回答

1
但是AbsoluteLayout已经被弃用了,我应该使用什么替代品呢?
编写自己的布局管理器,实现你想要的规则。

1
这听起来比实际操作容易……但这是他所能做到的最好的:P - Cristian

1
  • CommonsWare建议我编写自己的布局管理器,而Christian指出这听起来比实际要容易。
  • Yahel建议使用SurfaceView/OpenGl并绘制任何我想要的内容。

我发现您可以通过将子视图添加到RelativeLayout中,并将RelativeLayout.LayoutParams设置为仅具有默认值(除了宽度、高度、marginTop和marginLeft),来重新创建绝对定位。顶部和左侧边距将类似于AbsoluteLayout中的顶部和左侧。同时,支持负边距。

请确保考虑屏幕密度、宽度和方向更改以及所有其他曾经适用于AbsoluteLayout的绝对定位注意事项。

如果您无法使内容溢出屏幕右侧边缘,请尝试使用同样负的右边距来补充正的左边距。(原始问题)


0

我建议采用简单的方法:

  1. 将您的日历设置为15(或30)分钟的间隔,这样您就不需要绝对定位。使用线性视图填充的表视图,每个代表15分钟的间隔,并用事件填充。

或者采用更困难但更稳定/快速/可定制的方法:

  1. 使用SurfaceView/OpenGl根据您自己的需求进行绘制。

第一种方法的问题在于,您在视图层次结构中添加的元素越多,应用程序的性能就会受到越大的影响。假设一个传统月份您每天有3个预约,您的层次结构将填满数百个视图,渲染时间会很长,而且内存占用也很大。

第二种方法的问题:很难在一开始编写代码。如果您必须编写自己的布局管理器,请不要这样做,使用SurfaceView或OpenGL。


将我的事件添加到RelativeLayout并使用child.setPadding(left, top, 0, 0)从左上角向下移动它们是否有任何注意事项? - 700 Software
我唯一能看到的问题是RelativeLayout中的所有内容都会向下移动。你必须从上一个子元素的底部而不是RelativeLayout的顶部计算下一个子元素的填充,以确保准确性。 - Yahel

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