0

我编写了一个自定义视图,它覆盖了 onMeasure() 和 onLayout() 来完成一项非常具体的任务,忽略了某些属性,如 layout_height 和 layout_width。由于指定这些属性不再有意义,我想在我的布局 XML 中省略它们。但如果我这样做,我会收到异常说属性是必需的:

RuntimeException: Binary XML file line #49: You must supply a layout_width attribute.

有没有办法不再需要某些必需的属性?

我打算在我的视图的构造函数中尝试以编程方式添加这些属性,但 AttributeSet 似乎只有检索值的方法,而不是设置它们。我研究了是否可以使用 attrs.xml 找到解决方案,但没有看到任何有希望的东西。想法?

4

1 回答 1

0

为了结束这个问题,我将继续总结到目前为止的讨论,以及一些额外的见解。

简单地说,layout_width 和 layout_height 应该总是被设置,不管它们是否被它们设置的视图所尊重。即使 Android 提供的忽略这些属性的视图仍然需要在布局 XML 中设置它们。

当布局膨胀时,自定义视图是在引发验证异常之前构建的。当我记录提供给 View 的构造函数的 AttributeSet 类时,我看到它是一个 XmlBlock$Parser。我相信我可以通过转换 AttributeSet 并调用 setProperty() 来设置一个虚拟的 layout_height 和 layout_width 值,从而允许验证成功而无需在 XML 中指定这些属性。 但是,该方法假定所提供的 AttributeSet 始终是特定实现,适用于所有情况和所有 Android 版本。

于 2013-03-04T06:33:41.800 回答