以编程方式添加到自定义视图中的AttributeSet

时间:2013-02-14 22:19:01

标签: android android-view android-custom-view

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

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

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

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

1 个答案:

答案 0 :(得分:0)

为了结束这个问题,我将继续总结迄今为止所进行的讨论,以及一些其他见解。

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

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