In My case, what is difference in here:
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
and
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
This is the raw material design theme, which is used by Android 5 and upNot sure how this works wrt. new Android libraries for app design:
<style name="AppTheme" parent="android:Theme.*">
This is a way to use material design on pre-lollipop devices, which maintains compatibility.
<style name="AppTheme" parent="Theme.AppCompat.*">
You can design for newer APIs using AppCompat and still have it work on earlier API levels than what the base level for material design is.
In this case, it essentially means that you can run material design on platforms that predate material design. This isn't as important anymore now that versions that early make up at most ~2.5% of the market share at the time of writing.
Note, however, that using AppCompat does give you additional compatibility helpers beyond just being able to use the material theme on older devices. Also note that AppCompat has since been deprecated in favor of whatever system is currently mainstream and that Google hasn't axed yet (Jetpack?), which may or may not work differently.
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
Theme.AppCompat is for above API 7+
Theme.Material is for above API 21+
Related
I have a fairly simple app in android which uses the Support Library to provide an Actionbar for devices running on APIs lower than 11, so my main activity extends the AppCompatActivity.
My current app theme is as follows:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
After running some tests and making sure the app works as expected, I've decided to set the theme for devices running on API level 14 and above as follows:
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
The app has been crashing on startup ever since.
The logcat shows that an exception is being thrown, which says the following:
You need to use a Theme.AppCompat theme (or descendant) with this activity.
Does it mean that I must use only the AppCompat themes, regardless of the device's API?
If not, then how should I solve this issue?
Does it mean that I must use only the AppCompat themes, regardless of the device's API?
Yes. Or, stop using appcompat-v7, and inherit from Activity.
I have a problem with the API Level 21. I want to use the Material Design and still be able to run the application on lower API levels like 18 (Android 4.3.1). But I always get that error:
My manifest SDK looks like that:
And the build.gradle like that:
Hope this is enougth information to get some help, I really need it :(
Cheers.
As described in doc :
https://developer.android.com/training/material/theme.html
Note: The material theme is only available in Android 5.0 (API level 21) and above
This means that you have to use the values-v21 folder for your Material Theme.
However you can use the v7 Support Libraries to provide themes with material design styles for some widgets.
This is an example, using the AppCompat Theme.
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
<!-- Here we setting appcompat’s actionBarStyle -->
<item name="actionBarStyle">#style/MyActionBarStyle</item>
<!-- ...and here we setting appcompat’s color theming attrs -->
<item name="colorPrimary">#color/my_awesome_red</item>
<item name="colorPrimaryDark">#color/my_awesome_darker_red</item>
<!-- The rest of your attributes -->
</style>
More info here:
https://chris.banes.me/2014/10/17/appcompat-v21/
I see some application are already supporting material design.
For example the SMS app Textra supports material design. And it works fine on my KitKat.
How can I use the material design on older version of android.
I get error when I use this
<resources>
<!-- your app's theme inherits from the Material theme -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- theme customizations -->
</style>
Is there any solution?
Well... there is a way. Here is a complex answer for you
Material Design from Android 2.2 (API 8) to present 5.0 (API 21)
Here what you need:
Toolbar
Material Design Library for widgets (buttons, checkboxes, etc)
1. Toolbar
Just get the idea and you ready to go.
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="#+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimaryDark"/>
Setup guide: http://antonioleiva.com/material-design-everywhere/
Source with example: https://github.com/antoniolg/MaterialEverywhere
To make Toolbar work lower API 11 use Theme.AppCompat.Light.NoActionBar (instead windowActionBar set to false)
<style name="NoActionBarTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
</style>
2. Material Design Library
Here is Material Design Library for pretty buttons, etc.. Currently it's heavily developed.
Guide, code, example - https://github.com/navasmdc/MaterialDesignLibrary
Guide how to add library to Android Studio 1.0 - How do I import material design library to Android Studio?
.
Hope it helps :)
There is no direct approach as
<resources>
<!-- your app's theme inherits from the Material theme -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- theme customizations -->
</style>
But in KitKat we can bring the look and feel of material theme without much effort by using Translucent UI.
FLAG_TRANSLUCENT_STATUS or
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowTranslucentStatus">true</item>
Check this post for more information: material theme look and feel in KitKat
You can't use it in older version.
But for preventing error you can use specified folders for newer version of values.
Put default style.xml in the values folder, and put specified style.xml for styles for kitkat in values-v19 folder. "Specified" means with attributes that are allowed only in API version 19+.
I have this in my manifest:
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15"/>
But I would like to use a HOLO theme or something similar.
I know HOLO theme requires Android 11, but what can I do if I want to have a nice unifying standard theme?
Thanks,
Alex
Yes you can you just need to inherit different style, for instance in your
values/styles.xml
<style name="MyTheme" parent="android:Theme.Light">
</style>
And in then create values-v11/styles.xml
<style name="MyTheme" parent="android:Theme.Holo.Light">
<!-- API 11 theme customizations can go here. -->
</style>
You might be interested about UI for developer
Yes you can still use the HOLO theme while the minimum SDK is less than 11. You will need to create a folder values-v4 and also folders for v5 through v10 and put your styles.xml in there.
For more see here.
Also read this to keep it in mind.
You could use the Holo everywhere library, which is designed to easily backport Holo back to 1.6.
https://github.com/Prototik/HoloEverywhere
I'm trying to implement the holo theme for my app, so far so good...
but the app didn't work on older devices pre 3.0
so I made a custom theme, in values dir and values-v11 dir to make android switch to the correct one on runtime...
I also set the target sdk level to 7 to support android 2.1
now the holo theme isn't recognized
Am I aiming for something impossible?
What I want is pre 3.0 devices to use the default android theme
and everything that supports holo to use holo theme.
In values/styles.xml:
<style name="AppTheme" parent="#android:style/Theme.Light">
values-v11/styles.xml:
<style name="AppTheme" parent="#android:style/Theme.Holo.Light" />
values-v14/styles.xml:
<style name="AppTheme" parent="#android:style/Theme.DeviceDefault.Light" />