【问题标题】:Android: Alternative to AbsoluteLayout (I really do need absolute positioning)Android:AbsoluteLayout 的替代品(我确实需要绝对定位)
【发布时间】:2012-04-24 04:08:08
【问题描述】:

我正在尝试编写一个日历应用程序,我计划有一个网格(周视图),它可能是 TableLayout,并且直接在此之上,我必须在网格上绝对定位事件。

AbsoluteLayout 已被弃用。我应该改用什么?

事件可能会重叠,我认为尝试使用非绝对布局来实现我想要的效果真的很愚蠢。

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

【问题讨论】:

    标签: android layout css-position


    【解决方案1】:

    但 AbsoluteLayout 已被弃用。我应该改用什么?

    编写您自己的布局管理器来实现您想要的规则。

    【讨论】:

    • 这听起来比它更容易......但这是他能做的最好的:P
    【解决方案2】:
    • CommonsWare 建议编写我自己的布局管理器,Christian 指出这听起来比实际要容易。
    • Yahel 建议 SurfaceView/OpenGl 并绘制我想要的任何东西。

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

    确保考虑到屏幕密度、宽度和方向的变化,以及过去适用于 AbsoluteLayout 的所有其他绝对定位注意事项

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

    【讨论】:

      【解决方案3】:

      我建议要么走简单的路:

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

      或者努力但更稳定/快速/可定制的方式:

      1. SurfaceView/OpenGl 随心所欲地绘制自己的。

      数字 1 的问题在于,您在视图层次结构中添加的元素越多,您的应用对性能的影响就越大。假设一个常规月份,您每天有 3 个约会,您的层次结构将充满一百个视图,这些视图将非常长,而且会占用大量内存。

      数字 2 的问题:一开始编码要困难得多。如果您必须编写自己的布局管理器,请不要使用surfaceview 或openGL。

      【讨论】:

      • 将我的事件添加到RelativeLayout 并使用child.setPadding(left, top, 0, 0) 将它们从左上角向下移动有什么注意事项?
      • 我唯一能看到的是,RelativeLayout 中的所有内容都将向下移动。并且您必须计算下一个子填充,而不是从 relativelayout 的顶部,而是从最后一个子的底部计算才能准确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多