以编程方式检查视图是否包含特定布局?
programmatically check if view includes specific layout?
我有一个布局 section.xml
和一些可能包括 section.xml
的其他布局。
现在假设我有一个膨胀的布局,例如 layout.xml
,我想知道它是否包含 section.xml
?
我可以遍历 layout.xml
的所有 children,但我不知道如何检测 child 是否包含在此处或 section.xml
不是。我知道我可以尝试为 section.xml
设置唯一 ID 并检查 layout.xml
的 children 的 ID,但问题是 uniqueness;因为其他开发人员可能会忘记这条规则。
Now suppose I have an inflated layout, for example layout.xml, and I want to know does it include section.xml or not?
这是不可能的,以任何直接的方式。一旦布局资源被膨胀,就没有布局资源本身的迹象。这既适用于直接 inflation(例如,您调用的 inflate()
),也适用于间接 inflation(例如,布局中的 <include>
以拉入另一个布局)。
I know I can try to set a unique id for section.xml
我的意思是"set a unique ID for a widget inside of section.xml"。这是您在运行时可以做的最接近您尝试实施的规则的事情。
and check ids of children of layout.xml, but the problem is the uniqueness; because other developers may forget this rule.
那你的ID不够唯一。 :-) 使用 diceware 来想出其他人不会意外使用的东西,例如 android:id="aquamarineBakeryUprightAnxietyPlugAlchemy"
。理想情况下,在不需要从布局中的其他地方或代码中引用的小部件上使用它。
或者,实施 Lint 规则以在编译时检查内容。在Lint处理中,布局资源仍然是布局资源。因此,如果某些布局资源必须 <include>
您的 section
布局,您可以通过 Lint 规则进行确认。或者,如果某些布局资源不能 <include>
您的 section
布局,您也可以确认这一点。不幸的是,编写 Lint 规则并没有很好的文档记录。
我有一个布局 section.xml
和一些可能包括 section.xml
的其他布局。
现在假设我有一个膨胀的布局,例如 layout.xml
,我想知道它是否包含 section.xml
?
我可以遍历 layout.xml
的所有 children,但我不知道如何检测 child 是否包含在此处或 section.xml
不是。我知道我可以尝试为 section.xml
设置唯一 ID 并检查 layout.xml
的 children 的 ID,但问题是 uniqueness;因为其他开发人员可能会忘记这条规则。
Now suppose I have an inflated layout, for example layout.xml, and I want to know does it include section.xml or not?
这是不可能的,以任何直接的方式。一旦布局资源被膨胀,就没有布局资源本身的迹象。这既适用于直接 inflation(例如,您调用的 inflate()
),也适用于间接 inflation(例如,布局中的 <include>
以拉入另一个布局)。
I know I can try to set a unique id for section.xml
我的意思是"set a unique ID for a widget inside of section.xml"。这是您在运行时可以做的最接近您尝试实施的规则的事情。
and check ids of children of layout.xml, but the problem is the uniqueness; because other developers may forget this rule.
那你的ID不够唯一。 :-) 使用 diceware 来想出其他人不会意外使用的东西,例如 android:id="aquamarineBakeryUprightAnxietyPlugAlchemy"
。理想情况下,在不需要从布局中的其他地方或代码中引用的小部件上使用它。
或者,实施 Lint 规则以在编译时检查内容。在Lint处理中,布局资源仍然是布局资源。因此,如果某些布局资源必须 <include>
您的 section
布局,您可以通过 Lint 规则进行确认。或者,如果某些布局资源不能 <include>
您的 section
布局,您也可以确认这一点。不幸的是,编写 Lint 规则并没有很好的文档记录。