Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Repeating style in v19/v21

I have this in my styles.xml:

<style name="UserTheme" parent="ThemeBase">
    <item name="android:editTextStyle">@style/EditTextTheme</item>
</style>

Why do I have to repeat the editTextStyle line in v19/styles.xml and v21/styles.xml.

v21/styles.xml:

<style name="UserTheme" parent="ThemeBase">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:editTextStyle">@style/EditTextTheme</item>
</style>

Is there a way to just call it in the main styles.xml and have it apply everywhere so I don't have to write it multiple times?

like image 490
user5360382 Avatar asked Sep 22 '15 19:09

user5360382


1 Answers

I couldn't find any recommended solution so I i digged into AppCompat source. The way they do it is like this.

In your styles.xml

    <style name="Base.V7.Theme.YourThemeName" parent="Theme.AppCompat.Light.NoActionBar">
    </style>

    <style name="Base.Theme.YourThemeName" parent="Base.V7.Theme.YourThemeName" />

    <style name="Theme.YourThemeName" parent="Base.Theme.YourThemeName" >
       <item name="colorPrimary">@color/primary</item>
       <item name="colorPrimaryDark">@color/primary_dark</item>
       <item name="colorAccent">@color/accent</item>
    </style>

In your styles-v21.xml

    <style name="Base.V21.Theme.YourThemeName" parent="Base.V7.Theme.YourThemeName">
       <item name="android:navigationBarColor">@color/white</item>
       <item name="android:windowTranslucentStatus">true</item>
    </style>
    <style name="Base.Theme.YourThemeName" parent="Base.V21.Theme.YourThemeName" />

In your styles-v22.xml

    <style name="Base.V22.Theme.YourThemeName" parent="Base.V21.Theme.YourThemeName">
       <item name="android:navigationBarColor">@color/black</item>
       <item name="android:windowTranslucentStatus">false</item>
    </style>
    <style name="Base.Theme.YourThemeName" parent="Base.V22.Theme.YourThemeName" />

For every new version you extend the previous base version. If you want to override any attribute for different version just put it inside Base.VXX.Theme.YourThemeName block on your new styles-vXX.xml file.

like image 60
Vladimir Petrovski Avatar answered Sep 27 '22 18:09

Vladimir Petrovski