覆盖Android风格的"项目".

cod*_*ber 12 android overriding coding-style

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

对于像分隔符的高度,项目颜色等的东西.我有能力使用colors.xml覆盖尺寸和使用colors.xml覆盖颜色(仅留下布局,主题和样式).

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

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

<style name="ResultsListViewStyle" >
    <item name="android:listSelector">@android:drawable/list_selector_background</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

cod*_*ber 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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果要在特定应用程序中覆盖,可以简单地继承'theme'(<style name="Theme.newTheme">)并在那里更改该特定属性.

  4. 在你的风格而不是定义drawable你可以定义: <....android:background="?attrib:ListResultSelector" ../>

  5. 将主题应用于您的应用程序或相关活动

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