我有一个在循环中实例化的自定义组件,它们都需要应用相同的样式。由于它是一个自定义组件(特别是 LinearLayout 的子类),我不能只在 XML 中设置样式属性,因为组件布局 XML 的根标记是一个合并(以免使视图层次结构过于疯狂)。我找到了这个:
如何从 style.xml 创建 AttributeSet?
这几乎准确地描述了我的问题。只有答案是无用的——我的 R.java 是新鲜的,风格就在那里。我认为问题在于 getResources().getXml(R.style.my_style) 实际上并没有在 /res/values/styles.xml 文件中查找?
我使用的是 Scala,所以语法有点……更好。我的组件:
class MyLinearLayout(object : MyDatabaseObject, context : Context, attrs : AttributeSet = null)
extends LinearLayout(context, attrs) {
// Shows and interacts with the data in object
}
在活动中:
val componentStyle = Xml.asAttributeSet(getResources.getXml(R.style.my_style))
for (obj <- dbResults) viewGroup.addView(new MyLinearLayout(obj, this, componentStyle))
第一行会引发 Resources.NotFoundException。样式本身与其他样式一起在 res/values/styles.xml 中,并在不同的活动中应用于 LinearLayouts,所以这不是问题。