12

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

<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 的属性。

ps:我的问题的一种可能的解决方案是摆脱android:layout_toRightOf样式并将其移至布局xml。然后在目标应用程序中可以重新定义/覆盖这个布局。但我正在寻找基于样式的解决方案,因为它可以提供更简单直接的属性覆盖方式。
(我也可以将继承的样式与parent属性一起使用,但这将再次需要在应用程序中覆盖布局,我尽量避免)。

4

2 回答 2

9

要禁用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>
于 2011-10-25T08:52:41.927 回答
0

您可以使用“父”来派生专门的样式(请参阅http://developer.android.com/guide/topics/ui/themes.html),但是用样式定义这样的布局并没有让我印象深刻解决这个问题。可以在布局文件中保留一些布局信息。

于 2011-10-15T18:58:52.490 回答