我一直在研究创建基于 ViewGroup 的自定义布局,并且我得到(我认为)布局所基于的概念。无论如何,其中一些。
似乎基本思想是
- 首先询问您所有孩子的观点,他们想要多大 - 在 onMeasure()
- 基于此计算布局
- 根据所需的大小定位它们 - 在 onLayout()
我想这有点像网页布局。
但是,我根本不想这样做。基于可用的屏幕空间(x/y px),我有一大堆子视图(各种文本、按钮、自由格式图形),我需要定义它们的尺寸、设置文本大小,然后定位。即我对他们想要多大并不感兴趣,我想告诉他们他们将有多大以及他们将在哪里。
有(曾经)一个 AbsoluteLayout 做类似的事情,但它被贬值了。
由于布局完全与孩子(工作的完全固定数量)和屏幕尺寸相关,我建议:
- 创建我自己的自定义布局子类 ViewGroup
- 早期的某个地方 - 可能在它的 onCreate() 中?- 创建所有的孩子(我确切地知道需要什么)
- 在 onMeasure() 中忽略孩子们想要的一切,尽管我怀疑我必须调用 measureChild() 来避免异常,方法是确保在任何地方调用 setMeasuredDimension(),并根据传入的尺寸计算布局(大小、位置)宽度/高度测量规格
- 在 onLayout() 中,只需告诉所有孩子它会如何(“你在这里,这么大”)
- 因为我对孩子们想要的尺寸不感兴趣,所以只需吸收任何 layoutRequest() 回调并且什么都不做
然而,这在概念上似乎与 Android 认为应该完成布局的方式背道而驰——但这正是我所需要的。
所以我的问题是——这是一个可行的方案吗?