Android 中自定义视图的 EditMode 有什么限制?
What are the limitation in EditMode for custom views in Android?
我知道如何使用View.isInEditMode
方法。
我不完全明白的是什么时候我应该使用它。也就是在EditMode中我应该防止什么运行.
有一些明显的情况,自定义视图会做各种疯狂的事情,例如数据库访问、网络、线程等。很明显,您应该在 EditMode 中避免它们。
我创建了几个不执行上述任何操作的自定义视图。他们只使用常规绘图API,或加载可绘制资源等资源。
当 运行 在设备上它们看起来完全符合预期,但在布局设计器中它们要么看起来不像它们应该的样子,要么甚至由于一些神秘的异常而无法呈现(通常 NullPointerException
).
那么,EditMode 对这些 API 有什么限制吗?
只要自定义视图只调用视图框架的一部分,而不是任何应用程序代码,它们就可以正常工作。无论如何,这对视图来说是一个很好的分离:它们应该包含视图状态,而不是应用程序逻辑。
通常,如果您的自定义视图试图从其构造函数(或测量或绘制方法)访问 类,通常您只需要使用 View#isInEditMode,例如,这些调用尝试访问应用程序框架代码,例如片段管理器。在那种情况下,您可以使用 View#isInEditMode.
跳过这些调用
在不了解更多信息的情况下,很难详细说明您所看到的问题是什么。特别是,您看到的 NullPointerException 到底是什么(完整堆栈跟踪)。
也可能是布局库的错误。尝试将渲染版本(在渲染工具栏中)切换到不同的版本。
我知道如何使用View.isInEditMode
方法。
我不完全明白的是什么时候我应该使用它。也就是在EditMode中我应该防止什么运行.
有一些明显的情况,自定义视图会做各种疯狂的事情,例如数据库访问、网络、线程等。很明显,您应该在 EditMode 中避免它们。
我创建了几个不执行上述任何操作的自定义视图。他们只使用常规绘图API,或加载可绘制资源等资源。
当 运行 在设备上它们看起来完全符合预期,但在布局设计器中它们要么看起来不像它们应该的样子,要么甚至由于一些神秘的异常而无法呈现(通常 NullPointerException
).
那么,EditMode 对这些 API 有什么限制吗?
只要自定义视图只调用视图框架的一部分,而不是任何应用程序代码,它们就可以正常工作。无论如何,这对视图来说是一个很好的分离:它们应该包含视图状态,而不是应用程序逻辑。
通常,如果您的自定义视图试图从其构造函数(或测量或绘制方法)访问 类,通常您只需要使用 View#isInEditMode,例如,这些调用尝试访问应用程序框架代码,例如片段管理器。在那种情况下,您可以使用 View#isInEditMode.
跳过这些调用在不了解更多信息的情况下,很难详细说明您所看到的问题是什么。特别是,您看到的 NullPointerException 到底是什么(完整堆栈跟踪)。
也可能是布局库的错误。尝试将渲染版本(在渲染工具栏中)切换到不同的版本。