对于人们在检索视图的高度和宽度时遇到的问题,我已经看到了大量不同的问题和答案,尤其是这个线程。
以下是检索视图维度的方法:
- onWindowFocusChanged() 在您的活动中
- 子类化您正在使用的视图类型并覆盖 onSizeChanged()、onLayout() 或 onMeasure()
- 使用 ViewTreeObserver 和 addOnGlobalLayoutListener()
它们中的每一个似乎在某些情况下都可以工作,而在其他情况下,人们会说某些东西不能正常工作。由于 View 类没有 setOnDimensionsKnown(OnDimensionsKnown odk) 或类似方法,这些方法中的哪一个(或可能未提及的方法)将为我提供我的视图最终将具有的尺寸,无论它是否已绘制,具有 wrap_content 或fill_parent 参数,或者它在 px、dp 或类似中设置了明确的高度和宽度?
编辑:也许一个具体的例子会有所帮助,我试图让 PopupWindow 包装它的内容,并在 -x 方向上偏移它的宽度值。问题是在我显示弹出窗口之后才测量内容宽度以及弹出窗口宽度。所以基本上我想不出一个好方法来测量它在被绘制到屏幕之前的宽度。
我通常的方法是在绘制之前覆盖我需要的任何视图类的尺寸,并创建我自己的 setOnDimensionsKnown(OnDimensionsKnown odk) 方法并使用调用 onMeasure 的宽度和高度值触发它。这适用于我需要的每种情况,但是覆盖每个视图类来执行此操作似乎并不优雅。
我可以发布代码来帮助更多地解释这个例子。