【问题标题】:View(s) not visible on Android Jelly Bean视图在 Android Jelly Bean 上不可见
【发布时间】:2012-07-18 11:50:26
【问题描述】:

我目前正在开发一个可以检索和查看日程的应用程序。为了显示时间表,我使用了来自 Google IO 2011 应用程序的 TimeRulerView(以及 BlocksLayout 和 BlockView)java 源文件,因为我喜欢它的外观和感觉。源代码可以在这里找到:https://github.com/underhilllabs/iosched2011。 (谷歌将那里替换为 IO2012 的代码)。

自从我的 Galaxy Nexus 昨天更新了 Jelly Bean (4.1.1) 后,TimeRulerView(和/或其他之一)不再显示。

奇怪的是,它们实际上仍然存在,但不可见。我可以看到计时器通常具有的长度的滚动条。此外,当我通常单击视图中的一个块时,我会弹出一个小窗口,当没有看到计时器或块时,仍然会发生这种情况。

我在我的 JB GN 上测试了原始的 IO2011 应用程序,但那里也看不到任何东西,所以问题出在(一个)视图中或 JellyBean 呈现视图的方式(可能是项目黄油? )。

请参阅此处 (https://dl.dropbox.com/u/7102660/TimeRulerView_JellyBean_problem.zip) 以获取 ICS(应用程序工作)、JB(应用程序不工作)和 GoogleIO2011 应用程序的屏幕截图。

【问题讨论】:

  • 我对 ImageViews 有同样的问题。自从更新到果冻豆后,图像将不再显示。虽然布局空间计算正确..(我在自定义 arrayadapter 的 getView 中操作它们)
  • 使用hierarchyviewer 工具查看视图的边界。您将了解它是否具有零宽度/高度,或者它的子视图是否存在问题,或者它是否具有正确计算的大小,并且内容只是没有绘制。有了这些信息,您就可以继续前进了。

标签: android android-4.2-jelly-bean


【解决方案1】:

这可能与Hardware acceleration 有关吗?我最近在几部带有 ICS 的手机上遇到了问题,但并非所有手机/设备都受到影响。将 hardwareAccelerated 标记添加到我的清单也不能解决问题,我必须在我不想成为硬件加速的特定视图上定义它。我的解决方案在我的 xml 布局中使用了android:layerType="software",在 java 代码中使用了setLayerType(LAYER_TYPE_SOFTWARE, null)。

编辑:对此进行更多测试,它没有解决我在 Jelly Bean 上使用 setLayerType 的问题。在 ICS 上将图层类型设置为软件确实解决了我的问题。我可以让视图显示的唯一方法是将整个应用程序或特定活动设置为android:hardwareAccelerated="false"

【讨论】:

  • android:hardwareAccelerated="false" 最终为我解决了这个问题,加上 Stefan Arn 的解决方案。
【解决方案2】:

感谢 Chris 的回答,我玩弄了硬件加速设置。我也使用了 iosched2011 代码,只需要从 block_content.xml 文件中的 BlocksLayout 视图中删除 android:layerType="software" 行。

【讨论】:

  • 这个解决方案最终导致我的自定义视图出现,但其中一些出现故障或显示错误。我必须在清单中的活动中添加 android:hardwareAccelerated="false" 才能让一切重新开始正常工作。
猜你喜欢
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多