android - 以编程方式检查视图是否包含特定布局?
问题描述
我有一个布局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 规则并没有很好的记录。
推荐阅读
- r - tidyselect 更改了在 R 中选择函数时如何引用变量名的外部向量
- python - 在获取或创建 Django 中增加模型字段
- python - 我们可以在 tkinter 中嵌套两个 OptionMenu 小部件吗?
- python - 实现这种二维数值积分的计算速度更快的方法是什么?
- kubernetes - 一个 Kubernetes 应用程序有多少个线程?
- php - PHP在mysql表中创建用户
- laravel - 当我想在 laravel 5.8 中使用模型绑定时出现此错误
- c++ - 构建失败 arm-none-eabi-gcc
- python - 如何将 numpy 数组插入到数组的 numpy 数组中?
- angular - Angular 在新文件夹中找不到模块