企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 4.4.2 自定义View须知 本节将介绍自定义View过程中的一些注意事项,这些问题如果处理不好,有些会影响View的正常使用,而有些则会导致内存泄露等,具体的注意事项如下所示。 * 1.让View支持wrap_content 这是因为直接继承View或者ViewGroup的控件,如果不在onMeasure中对wrap_content做特殊处理,那么当外界在布局中使用wrap_content时就无法达到预期的效果,具体情形已经在4.3.1节中进行了详细的介绍,这里不再重复了。 * 2.如果有必要,让你的View支持padding 这是因为直接继承View的控件,如果不在draw方法中处理padding,那么padding属性是无法起作用的。另外,直接继承自ViewGroup的控件需要在onMeasure和onLayout中考虑padding和子元素的margin对其造成的影响,不然将导致padding和子元素的margin失效。 * 3.尽量不要在View中使用HandIer,没必要 这是因为View内部本身就提供了post系列的方法,完全可以替代Handler的作用,当然除非你很明确地要使用Handler来发送消息。 * 4.View中如果有线程或者动画,需要及时停止,参考View#onDetachedFromWindow 这一条也很好理解,如果有线程或者动画需要停止时,那么onDetachedFromWindow是一个很好的时机。当包含此View的Activity退出或者当前View被remove时,View的onDetachedFromWindow方法会被调用,和此方法对应的是onAttachedToWindow,当包含此View的Activity启动时,View的onAttachedToWindow方法会被调用。同时,当View变得不可见时我们也需要停止线程和动画,如果不及时处理这种问题,有可能会造成内存泄漏。 * 5.View带有滑动嵌套情形时,需要处理好滑动冲突 如果有滑动冲突的话,那么要合适地处理滑动冲突,否则将会严重影响View的效果,具体怎么解决滑动冲突请参看第3章。