【问题标题】:How to override (or hide) style attributes defined in the Android library project?如何覆盖(或隐藏)Android 库项目中定义的样式属性?
【发布时间】:2011-12-08 10:57:57
【问题描述】:

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

<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 属性的继承样式,但这又需要在应用程序中覆盖布局,我尽量避免这样做)。

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 是的,我知道“父母”。但在我的情况下它无济于事,因为布局是在库中定义的并且它引用ListItemText 样式。我当然可以在应用程序中重新定义样式(请参阅我的 p.s.),但想知道基于样式的解决方案是否可行。
猜你喜欢
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 2018-04-29
  • 2023-02-15
  • 2020-04-13
  • 1970-01-01
  • 2012-05-28
  • 2011-09-27
相关资源
最近更新 更多