我编写了一个自定义视图,它覆盖onMeasure()和onLayout()来完成一项非常具体的任务,忽略某些属性,如layout_height和layout_width。由于指定这些属性不再有意义,我想在我的布局XML中省略它们。但是,如果我这样做,我会得到例外,说明属性是必需的:
RuntimeException: Binary XML file line #49: You must supply a layout_width attribute.
有没有办法不再需要某些必需的属性?
我打算尝试在我的View的构造函数中以编程方式添加这些属性,但AttributeSet似乎只有用于检索值的方法,而不是设置它们。我调查了是否可以使用attrs.xml找到解决方案,但没有看到任何有希望的东西。想法?
答案 0 :(得分:0)
为了结束这个问题,我将继续总结迄今为止所进行的讨论,以及一些其他见解。
简单地说,应始终设置layout_width和layout_height,无论它们是否被设置的视图所尊重。即使Android提供的忽略这些属性的视图仍然需要在布局XML中设置它们。
当布局膨胀时,在抛出验证异常之前构造自定义View。当我将提供的AttributeSet的类记录到我的View的构造函数中时,我发现它是一个XmlBlock $ Parser。我相信我可以通过强制转换AttributeSet并调用setProperty()来设置虚拟layout_height和layout_width值,从而允许验证成功,而无需在XML中指定这些属性。 但,该方法假设所提供的AttributeSet始终是特定的实现,适用于所有情况和Android的所有版本。