如何避免向后兼容的Android应用程序中的样式重复

时间:2014-11-25 20:20:33

标签: android android-appcompat

我有一个基于appcompat兼容库的应用程序。我的应用程序有一些自定义样式,例如 values / styles.xml 中的按钮,UI等。我有 values-11 / styles.xml值-16 / stylex.xml values-21 / styles.xml

我的问题是:我不想在每个styles.xml文件中重复自定义样式代码。我希望较新版本继承自主syles.xml并仅编写新样式,但此方法不起作用,我收到错误,说我没有为我的活动设置主题。

以下是我的风格: 值/ styles.xml:

<resources>
<style name="Holo.Demo" parent="Theme.AppCompat" />
<style name="Holo.Demo.Theme.Light.DarkActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="mycustomstyle">@drawable/ic_menu_add_user_holo_light</item>

值-V11 / styles.xml:

<resources>
<style name="Holo.Demo.Theme.Light.DarkActionBar" parent="Holo.Demo.Theme.Light.DarkActionBar">

</style>

在我的andoirdmanifest文件中,我已将我的活动主题引用到

  

Holo.Demo.Theme.Light.DarkActionBar

1 个答案:

答案 0 :(得分:3)

在Eclipse中创建新项目时,将在values / styles.xml中生成两个样式:

<!--
    Base application theme, dependent on API level. This theme is replaced
    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.
    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>

for v11:

    <!--
    Base application theme for API 11+. This theme completely replaces
    AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <!-- API 11 theme customizations can go here. -->
</style>

和v14:

    <!--
    Base application theme for API 14+. This theme completely replaces
    AppBaseTheme from BOTH res/values/styles.xml and
    res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- API 14 theme customizations can go here. -->
</style>

整个应用程序的主题(xml中的标记):

android:theme="@style/AppTheme"

阅读评论,它们很有用。首先 - 无论如何你总是使用AppCompat。否则:第二 - 你可能在“全局”AppTheme中写了一些内容,让我们假设,样式按钮或textview,两者都存在于所有版本/ apis中。如果你想改变API 14中引入的smth,只需在v14风格的AppBASETheme中编写正确的行