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

Android 以编程方式添加到自定义视图中的AttributeSet,android,android-view,android-custom-view,Android,Android View,Android Custom View,我编写了一个自定义视图,它覆盖onMeasure()和onLayout()以完成一个非常特定的任务,忽略某些属性,如layout\u height和layout\u width。由于指定这些属性不再有意义,我想在布局XML中省略它们。但如果我这样做,我会收到异常,说属性是必需的: RuntimeException: Binary XML file line #49: You must supply a layout_width attribute. 有没有办法不再需要某些必需的属性 我本来打算

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

RuntimeException: Binary XML file line #49: You must supply a layout_width attribute.
有没有办法不再需要某些必需的属性


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

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

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


当布局膨胀时,将在引发验证异常之前构造自定义视图。当我记录提供给视图构造函数的AttributeSet类时,我看到它是一个XmlBlock$解析器。我相信我可以通过强制转换AttributeSet并调用setProperty()来设置虚拟布局高度和布局宽度值,从而允许验证成功,而无需在XML中指定这些属性然而,这种方法假设提供的属性集在所有情况和所有版本的Android中都是一个特定的实现。

为什么你不能简单地使用这些属性(无论你想要什么值),如果你不需要它们,就忽略它们呢?我可以(也可以),但我宁愿避免指定的混乱完全被忽略的“必需”属性。它似乎有一个用例。例如,Android的SlidingDrawer也不考虑高度和宽度。所以我很好奇Android是否提供了一种方法来忽略通常(但不总是)的标准属性必选。似乎不需要,但我认为值得一问。
SlidingDrawer
不考虑高度和宽度,但它要求这些属性存在(因此您可以看到SDK工程师解决您所面临问题的方式)。无论如何,当视图的
LayoutParams
被构建时,该检查就完成了,因此您可以做的事情不多(而且也不值得这么做)。我有点想,但我想确定我没有遗漏什么。谢谢你的确认。GridLayout的子视图除外。在那里,视图不需要有布局宽度或布局高度。我自己的内部“布局宽度/高度”缺失警报在我看到它们时也会响起,这花了我一段时间。