我有一个布局section.xml
和一些其他布局,其中可能包括section.xml
.
现在假设我有一个膨胀的布局,例如layout.xml
,我想知道它是否包含section.xml
?
我可以遍历 的所有孩子layout.xml
,但我不知道如何检测孩子是否section.xml
包含在此处。我知道我可以尝试设置一个唯一的 idsection.xml
并检查 的孩子的 id layout.xml
,但问题是唯一性;因为其他开发者可能会忘记这条规则。
我有一个布局section.xml
和一些其他布局,其中可能包括section.xml
.
现在假设我有一个膨胀的布局,例如layout.xml
,我想知道它是否包含section.xml
?
我可以遍历 的所有孩子layout.xml
,但我不知道如何检测孩子是否section.xml
包含在此处。我知道我可以尝试设置一个唯一的 idsection.xml
并检查 的孩子的 id layout.xml
,但问题是唯一性;因为其他开发者可能会忘记这条规则。
现在假设我有一个膨胀的布局,例如 layout.xml,我想知道它是否包含 section.xml?
这是不可能的,以任何直接的方式。一旦布局资源膨胀,就没有布局资源本身的迹象。这既适用于直接膨胀(例如,inflate()
您称之为),也适用于间接膨胀(例如,<include>
在一个布局中拉入另一个布局)。
我知道我可以尝试为 section.xml 设置一个唯一的 ID
我将其解释为“为 section.xml 中的小部件设置唯一 ID”。这是您在运行时可以做的最接近的事情,类似于您尝试实施的规则。
并检查 layout.xml 的子项的 id,但问题是唯一性;因为其他开发者可能会忘记这条规则。
那么你的 ID 不够唯一。:-) 使用 diceware 想出一些其他人不会意外使用的东西,例如android:id="aquamarineBakeryUprightAnxietyPlugAlchemy"
. 理想情况下,在不需要从布局中的其他地方或代码中引用的小部件上使用它。
或者,实现一个 Lint 规则以在编译时检查事物。在 Lint 处理中,布局资源仍然是布局资源。因此,如果某些布局资源必须<include>
您的section
布局,您可以通过 Lint 规则进行确认。或者,如果某些布局资源必须不是<include>
您的section
布局,您也可以确认。不幸的是,编写 Lint 规则并没有很好的记录。