Android Jelly Bean上的视图不可见

12

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

自从我的 Galaxy Nexus 昨天更新到 Jelly Bean(4.1.1)以来,TimeRulerView(或其中之一)就不再显示了。

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

我在我的 JB GN 上测试了原始的 IO2011 应用程序,但那里也没有任何东西可见,因此问题出现在视图或 JellyBean 渲染视图的方式(可能是项目 butter?)。

请参见此处(https://dl.dropbox.com/u/7102660/TimeRulerView_JellyBean_problem.zip)以查看 ICS(应用程序正常工作)、JB(应用程序不工作)和 GoogleIO2011 应用程序的截图。


我在ImageViews方面遇到了同样的问题。自从更新到Jelly Bean版本后,图片就再也无法显示出来了。尽管布局空间被正确计算了..(我在自定义ArrayAdapter的getView方法中对它们进行操作)。 - fklappan
2
使用HierarchyViewer工具查看您的视图边界。您将了解它是否具有零宽度/高度,或者其子视图是否存在问题,或者它是否已正确计算大小,但内容仅未绘制。有了这些信息,您就可以继续进行。 - Pointer Null
2个回答

7

这可能与硬件加速有关吗?我最近在ICS上的一些手机上遇到了问题,但并非所有手机/设备都受影响。在我的清单中添加hardwareAccelerated标签也无法解决该问题,我必须在特定视图上定义它,以防止其被硬件加速。我的解决方案是在xml布局中使用android:layerType=“software”,并在Java代码中使用setLayerType(LAYER_TYPE_SOFTWARE, null)。

编辑:测试后,使用Jelly Bean上的setLayerType并不能解决我的问题。将层类型设置为软件可以解决我的ICS问题。我能使视图显示的唯一方法是将整个应用程序或特定活动设置为android:hardwareAccelerated="false"


android:hardwareAccelerated="false" 最终解决了这个问题,加上 Stefan Arn 的解决方案。 - SilithCrowe

4

感谢Chris的答案,我尝试了硬件加速设置。我也使用了iosched2011代码,只需要从block_content.xml文件中的BlocksLayout View中删除android:layerType="software"这一行即可。


这个解决方案最终让我的自定义视图出现了,但其中一些存在故障或显示错误。我不得不在清单文件中的活动中添加android:hardwareAccelerated="false",才能使一切恢复正常工作。 - SilithCrowe

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