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

时间:2011-01-20 16:08:46

标签: android layout css-position

我正在尝试编写一个日历应用程序,并且我计划有一个网格(周视图),这可能是TableLayout,并且直接在其上我必须绝对地将事件放在网格上。< / p>

但不推荐使用AbsoluteLayout。我该怎么用?

事件可能重叠,我认为尝试使用非绝对布局来实现我想要的东西真的很傻。

也许我应该在每个子节点上使用RelativeLayout左边距和边距顶部。看起来很奇怪这样做,可能效率不高。这是最好的方式还是有替代方案?

3 个答案:

答案 0 :(得分:1)

  

但不推荐使用AbsoluteLayout。我该怎么用?

编写自己的布局管理器,实现所需的规则。

答案 1 :(得分:1)

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

我发现您可以通过将子视图添加到RelativeLayout来重新创建绝对定位,并将RelativeLayout.LayoutParams设置为除了width,height,marginTop和marginLeft之外只有默认值。顶部和左边距与AbsoluteLayout中的顶部和左边相似。此外,支持负边距。

确保考虑屏幕密度和宽度以及方向更改以及用于AbsoluteLayout的绝对定位的所有其他警告

如果您在将内容溢出屏幕右边缘时遇到问题,请尝试使用同样负的右边距补充正左边距。 (original question)

答案 2 :(得分:0)

我建议你采取简单的方法:

  1. 将日历设置为15(或30)分钟间隔,这样您就不需要绝对定位。一个填充了线性视图的表视图,每个视图代表15分钟的间隔,并用事件填充这些视图。
  2. 或者努力但更加稳定/快速/可定制的方式:

    1. SurfaceView / OpenGl可以随心所欲地绘制自己的颜色。
    2. 数字1的问题在于,您在视图中添加元素的次数越多,您的应用就越会受到性能影响。说一个常规的月份,你每天有3个约会,你的层次结构将被填充一百个视图,这将是非常长的渲染和沉重的记忆。

      数字2的问题:首先编码起来要困难得多。如果你必须编写自己的布局管理器,请不要使用surfaceview或openGL。