EditMode对Android中的自定义视图有什么限制?

时间:2015-02-23 22:23:37

标签: android android-view android-custom-view editmode

我知道如何使用View.isInEditMode方法。

我不能完全理解何时我应该使用它。也就是说,我应该阻止在EditMode中运行。

有一些明显的情况,自定义视图可以处理所有类似疯狂的事情,例如数据库访问,网络,线程等。很明显,你应该在EditMode中避免使用它们。

我创建了几个不做上述任何操作的自定义视图。它们只使用常规绘图API,或者加载drawables等资源。

在设备上运行时,它们看起来完全符合预期,但在布局设计器中,它们要么看起来不应该,要么甚至因为某些神秘异常(通常是NullPointerException)而无法渲染。

那么,这些API的EditMode有任何限制吗?

1 个答案:

答案 0 :(得分:2)

自定义视图应该可以正常工作,只要它们只调用视图框架的一部分,而不是任何应用程序代码。无论如何,这对视图来说是一个很好的分离:它们应该包含视图状态,而不是app逻辑。

通常,如果您的自定义视图试图从其构造函数(或度量或绘制方法)访问类,那么您只需使用View#isInEditMode,例如,这些调用尝试访问应用程序框架代码,例如FragmentManager。在这种情况下,您可以使用View#isInEditMode跳过这些调用。

很难说更多关于你所看到的问题是什么,而不了解更多。特别是,您正在看到的NullPointerException究竟是什么(完整堆栈跟踪)。

它也可能是一个layoutlib错误。尝试将渲染版本(在渲染工具栏中)切换到其他版本。