如何覆盖(或隐藏)在Android库项目中定义的样式属性?

13

我有一组类似的应用程序。我将共同的资源和代码提取到库项目中,应用程序只覆盖他们需要的内容。在我的库中定义了以下样式:

<style name="ListItemText">
    <item name="android:layout_toRightOf">@id/preview_image</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">@dimen/previewTextSize</item>
</style>

正如您所看到的,它包含android:layout_toRightOf属性,因为该样式将应用于ListView行中应该显示在图像右侧的文本。
但是在我的一个应用程序中,我想显示图像下方的文本。在该应用程序中,ListItemText样式应该如何定义以覆盖android:layout_toRightOf属性值并替换为android:layout_below

如果我将其定义为:

<style name="ListItemText">
    <item name="android:layout_below">@id/preview_image</item>
</style>
它将文本显示在图像的右侧和下方,有效地总结了库和应用程序样式XML的属性。 p.s.:解决我的问题的一个可能的方案是在样式中摆脱android:layout_toRightOf并将其移至布局XML中。然后,在目标应用程序中,可以重新定义/覆盖此布局。但我正在寻找基于样式的解决方案,因为它可以提供更简单和直接的属性覆盖方式。(我还可以使用带有parent属性的继承样式,但这又需要在应用程序中进行布局覆盖,这是我想避免的)。

我这里正在做类似的事情!!!https://dev59.com/BWQn5IYBdhLWcg3wGD5s - Etienne Lawlor
2个回答

11

如果要禁用android:layout_toRightOf,可以将其设置为@null。如果您的应用程序定义了以下ListItemText样式,则它应该按照您想要的方式工作:

<style name="ListItemText">
    <item name="android:layout_toRightOf">@null</item>
    <item name="android:layout_below">@id/preview_image</item>
</style>

正常工作,谢谢。这个@null引用在文档中有指定吗? - Idolon
1
据我所知,在任何显眼的地方都没有提到过,但是像这里提到过:http://developer.android.com/resources/articles/window-bg-speed.html - Martin Nordholts

0

是的,我知道“parent”的作用。但在我的情况下它没有帮助,因为布局是在库内定义的,并且引用了ListItemText样式。当然,我可以在应用程序中重新定义样式(请参见我的p.s.),但我想知道是否有基于样式的解决方案。 - Idolon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接