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

时间:2011-10-15 18:45:53

标签: android android-layout styles override android-library

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

<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属性的继承样式,但这会再次要求应用程序中的布局覆盖,我试图避免这样做。

2 个答案:

答案 0 :(得分:6)

要停用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>

答案 1 :(得分:0)

您可以使用“parent”来派生专门的样式(请参阅http://developer.android.com/guide/topics/ui/themes.html),但使用样式定义这样的布局并不会影响我解决这个问题的方法。可以在布局文件中留下一些布局信息。