Android布局检查器中的灰色视图是什么意思?

4
在Android Studio中,选择 工具 -> 布局检查器(Layout Inspector),若一个视图在View Tree中呈现灰色(淡化、变暗),这意味着什么?该层仍然具有可见属性(VISIBLE)。
我在文档https://developer.android.com/studio/debug/layout-inspector中没有看到任何解释,当悬停在视图上时也没有工具提示。
你可以在此下载涉及的.li布局捕获文件


为了提供背景和参考,我正在尝试弄清楚为什么片段没有显示在id/content_container中,https://gitlab.com/gitlab-org/gitter/gitter-android-app/issues/108

如果您想自己查看代码,该项目是开源的,https://gitlab.com/gitlab-org/gitter/gitter-android-app

2个回答

6
灰色的View在LayoutInspector快照被拍摄时不会被渲染,因为它们不需要显示。
例如:
  • 您代码中的NavigationView目前处于隐藏状态(您可以通过打开它并使用LayoutInspector再次拍摄快照来测试我是否正确)
  • 只要RecyclerView没有分配适配器(也许还包括空的情况-未进行测试),NavigationView中的View就会变灰
  • 有时候View无法适应屏幕大小,例如当您忘记将LinearLayout设置为"vertical"时,大多数子元素都位于屏幕右侧边缘

2
这些节点是样板布局,对于框架来说是必不可少的。
那个名为ContentFrameLayout的根视图带有id android.R.id.content
其中膨胀了R.layout.activity_main并将进一步嵌套节点添加到其中。
基本上它是命名空间android.R(灰色)与im.gitter.gitter.R(黑色)之间的区别。
android.R导入的节点可能在有可见布局膨胀时变为黑色。

关于有子元素的情况呢?我在 NavigationView 上看到了 INVISIBLE,也许它与没有绘制/渲染有关吧? - MLM
@MLM 那个子元素可能也是样板文件,没有自定义视图被填充;他们需要在那里,否则框架会抛出NPE异常。我还查看了https://gitlab.com/gitlab-org/gitter/gitter-android-app/tree/master/app/src/main/res/layout ...只是不确定哪一个是它。 - Martin Zeitler
什么被认为是布局样板?为什么其他的FrameLayoutContentFrameLayoutLinearLayout不是灰色的? - MLM
1
@MLM,ContentFrameLayout是根视图,其ID为android.R.id.content,它已经填充了R.layout.activity_main并添加了更多嵌套节点。这些节点来自自定义XML。当查看MainActivity.java时,没有NavigationView头被填充;如果您在其中添加一个自定义头,则不应再变灰(只是为了证明我所说的)。我已更新答案...那个命名空间的问题似乎是最好的解释——因为这是框架资源与应用程序资源之间的区别。 - Martin Zeitler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接