覆盖Android风格的“项目”。

时间:2011-07-20 14:58:27

标签: android coding-style override

我有一个Android库,包含主题,属性,样式,颜色,当然还有代码。

像分隔符的高度,项目的颜色等等。我可以使用colors.xml覆盖尺寸,使用colors.xml覆盖尺寸(仅留下布局,主题和样式)。

但是,如果我有一个使用Android的list_selector_background的ListView,并且我还有另一个使用此选择器进行可按压TextView的活动,除了在代码中覆盖它之外,我找不到使用它的方法?style:attrib语法,但我看不出它有什么帮助

我目前拥有的简单而快速的解决方案是创建一种风格:

<style name="ResultsListViewStyle" >
    <item name="android:listSelector">@android:drawable/list_selector_background</item>
</style>

然后将上面的xml复制粘贴到我的实际项目style.xml并在那里更改选择器。这并不是那么糟糕但是我需要使用这个选择器为每个项目执行此操作...

2 个答案:

答案 0 :(得分:14)

由于没有人选择手套,我最终找到了解决方案,确实是一个属性 解决方案:

  1. 在你的 attrs.xml 中为你需要的值创建一个条目,对于像draw这样的drawbale,例如使用:<attr name="ListResultSelector" format="reference" />

  2. 在您的 theme.xml 中定义您的主题,如果该属性是您唯一的属性,并且您希望将Android普通主题作为主题,则可以使用:

    <style name="Theme" parent="@android:style/Theme.NoTitleBar">
      <item name="ListResultSelector">@android:drawable/list_selector_background</item>
    </style>
    
  3. 如果要在特定应用程序中覆盖,可以简单地继承“主题”(<style name="Theme.newTheme">)并在那里更改该特定属性。

  4. 在您的风格中,您可以定义:<....android:background="?attrib:ListResultSelector" ../>

  5. 而不是定义drawable
  6. 将主题应用于您的应用程序或相关活动

  7. 通过这种方式,我不需要覆盖整个样式,只需要像drawables,type faces等特殊属性...因此,如果我需要更改原始样式的某些内容,并且我希望它同时影响旧的和新的应用程序,我不需要两次。

答案 1 :(得分:1)

纠正@ codeScriber的回答:

主题中定义的资源可以通过?attr/ListResultSelector?ListResultSelector在布局中引用。

另请参阅有关此问题的文档:http://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes