Android新手,需要类似于AbsoluteLayout的自定义布局

时间:2012-06-27 05:23:25

标签: android layout

我一直在研究基于ViewGroup创建自定义布局,我得到(我认为)布局所基于的概念。其中一些,无论如何。

似乎基本的想法是

  • 首先询问您孩子的所有想法 - 在onMeasure()
  • 根据
  • 计算布局
  • 根据所需的尺寸定位所有尺寸 - 在onLayout()

我想这有点像网页布局。

但是,我根本不想这样做。基于可用的屏幕空间(x / y px),我需要定义尺寸,设置文本大小,然后定位,以满足各种子视图(各种文本,按钮,自由形式图形)。即我对他们想要的大小并不感兴趣,我想告诉他们他们将会有多大以及他们将会在哪里。

有一个AbsoluteLayout执行类似的操作,但它已被折旧。

由于布局完全与孩子(作业完全固定的数字)和屏幕尺寸联系在一起,我建议:

  • 创建我自己的自定义布局子类ViewGroup
  • 早些时候 - 可能在onCreate()? - 创造所有孩子(我确切地知道需要什么)
  • onliasure()中的
  • 忽略了孩子们想要的一切,虽然我怀疑我必须通过确保在任何地方调用setMeasuredDimension()来调用measureChild()以避免异常,并根据维度计算布局(大小,位置)传递给width / heightMeasureSpecs
  • 在onLayout()中告诉所有孩子它将会是怎样的(“你在这里这么大”)
  • 因为我对孩子们想要大小的东西不感兴趣,只需吸收任何layoutRequest()回调并且不做任何事情

然而,从概念上看,这似乎与Android认为应该如何进行布局有关 - 但这正是我所需要的。

所以我的问题是 - 这是一个可行的方案吗?

3 个答案:

答案 0 :(得分:1)

您可以获取AbsoluteLayout的来源并根据您的需求进行调整。如果AbsoluteLayout被弃用,那将是有原因的,如果这个原因不适用于您,您可以自由地做任何您喜欢的事情。

答案 1 :(得分:0)

是的,而弃用的AbsoluteLayout仍然可以用于ICS。

您可能需要重新考虑您的UI设计 - 因为某种原因而被弃用。

答案 2 :(得分:0)

如果您想要确切地告诉孩子们大小是多少,当您调用onMeasure时,您可以使用MeasureSpec模式完全传递尺寸。他们应该遵守这一点,你不应该做任何hacky变通办法来忽略他们要求的大小。

请参阅View.MeasureSpec编码。传递给onMeasure的(int,int)应该是measureSpec编码的。