如果内部没有视图,是否应该覆盖 onLayout

Should onLayout be overridden if there are no views inside

我创建了一个扩展 ViewGroup 的自定义控件。最终,控件的实现仅使用 canvas 来绘制一些形状,而不添加任何 Views.

在那种情况下,onLayout 是否仍应被某种通用实现覆盖,还是我应该将其保留为空方法?

Should onLayout be still overridden in that scenario

如果您要扩展 ViewGroup 那么是的,您必须实现 onLayout() 即使它什么都不做,因为它是抽象方法。或者扩展即 FrameLayout 而不是 ViewGroup.

How would a general implementation be?

如果您没有 children 布局,只需保留空方法体。

编辑

Yeah I meant if I should have some sort of a general implementation or just leave it empty

参见docs

void onLayout ()

Called from layout when this view should assign a size and position to each of its children. Derived classes with children should override this method and call layout on each of their children.

没有用处就没有实施的意义。没有通用的实现,这就是为什么这个方法在 ViewGroup 中是 abstract 的原因。你没有孩子,那么你不需要布局任何东西。然而你需要 (空)方法由于扩展抽象 class.