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?
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'.
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.
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
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>.
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.
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.
Related
I'm a learner of Android programming and I'm currently reading this book, well it's the first, HeadFirst Android Development.
In chapter 14 Navigation Drawers, there was this attribute of TextView textAppearance that was given a value of #style/textAppearance.AppCompat.Body1.
The book said it was a built-in styles that makes text look slightly bolder.
My question is, how many built-in styles does Android has?
I want to know all of them.
If you go through the following link you will get all the styling options for TextView.
https://developer.android.com/reference/android/widget/TextView
you can check the styling options for other views from the left panel of the same link by clicking on other classes.
A style is defined in an XML resource that is separate from the XML that specifies the layout. This XML file resides under res/values/ directory of your project and will have as the root node which is mandatory for the style file.
You can define multiple styles per file using tag but each style will have its name that uniquely identifies the style. Android style attributes are set using tag as:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomFontStyle">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:capitalize">characters</item>
<item name="android:typeface">monospace</item>
<item name="android:textSize">12pt</item>
<item name="android:textColor">#00FF00</item>/>
</style>
</resources>
Using Styles
Once your style is defined, you can use it in your XML Layout file using style attribute as follows
<TextView
android:id="#+id/text_id"
style="#style/CustomFontStyle"
android:text="#string/hello_world" />
Always, when you are writing in XML to find the built-in attribute use:
attribute_name="#android:attribute_value
The #android: will list all the built-in the attribute for a given attribute you want, for Example:
style="#android:style/TextAppearance.AppCompat.Medium"
Default Styles & Themes
Android provides a large collection of styles and themes that you can use in your applications. You can find a reference of all available styles in the R.style class. To use the styles listed here, replace all underscores in the style name with a period. For example, you can apply the Theme_NoTitleBar theme with "#android:style/Theme.NoTitleBar".
You can see the following source code for Android styles and themes- here and here
bear with me as I am new to android studio with the Kotlin language.
I have declared a textView object in my activity_main.xml file. I am trying to customise the font, font size, and text colour of this textView. I have been able to do so by customising each attribute individually; however, this is quickly getting tedious for my other activity.xml files.
I know that there is a textAppearance property that holds all these values. How can I declare a custom textAppearence so that I no longer need to change these values independently.
You can define custom styles in a styles.xml file located at: res/values/styles.xml
<style name="GreenText">
<item name="android:textColor">#00FF00</item>
</style>
It can be applied via:
<TextView style="#style/GreenText"... />
In appcompat-v7:22.2.0, two resource hierarchies declared in values.xml are confusing to me.
For example, below styles are found in same file: values.xml in appcompat-v7:22.2.0
<!-- From: file:/usr/local/google/buildbot/repo_clients/https___googleplex-android.googlesource.com_a_platform_manifest.git/lmp-mr1-supportlib-release/frameworks/support/v7/appcompat/res/values/styles.xml -->
<style name="TextAppearance.AppCompat.Widget.ActionBar.Title"
parent="Base.TextAppearance.AppCompat.Widget.ActionBar.Title"/>
<style name="TextAppearance.Widget.AppCompat.Toolbar.Title"
parent="Base.TextAppearance.Widget.AppCompat.Toolbar.Title"/>
There is effectively no difference.
From line 323 of styles_base.xml:
<style name="Base.TextAppearance.Widget.AppCompat.Toolbar.Title"
parent="TextAppearance.AppCompat.Widget.ActionBar.Title">
</style>
The Toolbar.Title base style is just an alias to the ActionBar.Title style. I am assuming that Google organized it like this because they are attempting to replace the word "Action Bar" with the word "Toolbar" in our vocabulary, but wanted to make these styles easy to find.
What's the difference between the resource hierarchy of the two: Appcompat.Widget and Widget.AppCompat?
Someone just decided to name them differently. Since both styles have an explicit parent, neither one will inherit any attributes by default anyway. My guess is that it is simply a mistake.
I’m new to android and are looking at tutorials to learn android development. I'm trying to figure out how all the xml files and tags are fit together.
In a google tutorial for actionbars one custom style, in themes.xml, look like this:
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="#android:style/Widget.Holo.ActionBar">
<item name="android:titleTextStyle">#style/MyActionBarTitleText</item>
</style>
I don't find or understand where "#style/MyActionBarTitleText" is defined and i don't get any compiling error in Eclipse. When a tag is referenced like this i thought it has to be defined in a xml file under my project somewhere but i cant find it?
Style XMLs are defined in res/drawable[-mdpi/ldpi/xhdpi]
Style defines look of your Activity. You can define color, themes, shapes in Styles. Read more about styles and other resources here
http://developer.android.com/guide/topics/resources/style-resource.html
http://developer.android.com/guide/topics/resources/available-resources.html
Yes you can find it in: res->values->styles.xml
and also you can change your application theme/style in styles.xml file
I am trying to set a background for every XML layout in my application, and I am using the same picture for them all. At the moment, I am going through all hundred or so layouts and just typing in the code:
android:background="#drawable/dirtwall"
Into all of the layouts. How would I be able to set it automatically so I wouldn't have to change other backgrounds as I made more, and so I wouldn't have to go through all of my XML files?
Also, I am using Eclipse.
You can use styles. This way, you can define all common elements in a single place and then update it only there.
Example style.xml, which should be located in your project's /res/values/ folder
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="appearance">
<item name="android:background">#drawable/dirtwall</item>
</style>
</resources>
and use it like
<LinearLayout
...
style = "#style/appearance"
>
Apply a theme to an Activity or application
To set a theme for all the activities of your application, open the AndroidManifest.xml file and edit the <application> tag to include the android:theme attribute with the style name. For example:
<application android:theme="#style/CustomTheme">
If you want a theme applied to just one Activity in your application, then add the android:theme attribute to the <activity> tag instead.
if you want the background to be transparent, use the Translucent theme:
<activity android:theme="#android:style/Theme.Translucent">
here is the declaration for a custom theme which is simply the standard platforms default light theme. It would go in an XML file under
res/values (typically res/values/styles.xml):
<style name="CustomTheme" parent="android:Theme.Light">
...
</style>