What is difference among styles.xml and themes.xml

2020-05-14 13:48发布

问题:

May I know what is the difference between styles.xml and themes.xml? To me, they just look same as both XML are in the same format.

<style name="...
    <item name="...

So, in my app which provide customization coloring, size, drawable, ... do I need both styles.xml and themes.xml as well? How should I decide which XML to put in which file?

回答1:

Out of the whole page of the Styles and Themes. You may be looking for this line.

When you apply a style to a single View in the layout, the properties defined by the style are applied only to that View. If a style is applied to a ViewGroup, the child View elements will not inherit the style properties—only the element to which you directly apply the style will apply its properties. However, you can apply a style so that it applies to all View elements—by applying the style as a theme.

When you apply as theme, it changes everything in scope, depending if you applied it on Activity or Application. Style is more 'local'.



回答2:

Quoted from Android API guide:

To create a set of styles, save an XML file in the res/values/ directory of your project. The name of the XML file is arbitrary, but it must use the .xml extension and be saved in the res/values/ folder. The root node of the XML file must be <resources>.

Full documentation

So I guess it really doesn't matter if you put any styles in any files as long as it's an xml file which locates in res/values/ folder.



回答3:

There is no functional difference between styles.xml and themes.xml as many answers have indicated.

It is worth noting that Google's iosched2014 app has ONLY a styles.xml (no themes.xml).

https://github.com/google/iosched



回答4:

Taken from the Styles and Themes document, in the Defining Styles section:

To create a set of styles, save an XML file in the res/values/ directory of your project. The name of the XML file is arbitrary, but it must use the .xml extension and be saved in the res/values/ folder.

The root node of the XML file must be <resources>.


回答5:

I am just realizing that for example Toolbar text colors go into a theme declaration, and for other aspects go into a style declaration

<style name="ToolbarTheme" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
</style>

<style name="ToolbarStyle" parent="Base.Widget.AppCompat.Toolbar">
    <item name="android:minHeight">?attr/actionBarSize</item>
    <item name="android:background">@color/colorPrimary</item>
</style>

And in the toolbar declaration

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    style="@style/ToolbarStyle"
    android:theme="@style/ToolbarTheme">
</android.support.v7.widget.Toolbar>

I tried to omit the theme by moving its items into the style, but that didn't work. So in this case it seems as these are just styles which are as theme since they affect the inherited children in the toolbar such as the textfields.



回答6:

Hi here is an article regarding to the difference between styles and themes XML in android please go through

And also here the android documentation regarding to styles and themes in Android.