Material Design on older sdk - android

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+.

Related

What is the difference between Theme.AppCompat and Theme.Material in Android?

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+

App crashes on changing theme under styles

My Android App :
Target API:22
Min API:15
Device run on :API level 22
I don't understand this whole theme concept ,
In my manifest.xml ,I have set android:theme="#style/AppTheme"
and all activities use this theme
Now my understanding is that they all use the theme called AppTheme which I can now define by extending other themes inside my styles.xml
In my styles.xml
I have this
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
My understanding is that AppCompat themes allow us to use newer(say material themes) on older devices also .
I run this app on API Level 22 and API Level 15 , it works fine
Now when i change it to
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- Customize your theme here. -->
</style>
</resources>
It gives a warning saying this theme can be used only on API 21 or above which is correct , now when I ignore the warning and run it in on API 22 it crashes.
Why?
Also I tried to make AppTheme's parent as Holo , Light etc ,all of them crash the App , why , please explain?
All of these end up crashing the App
<style name="AppTheme" parent="android:Theme.Translucent">
<style name="AppTheme" parent="android:Theme.Holo">
Why do these not work , Holo was introduced in 15 right?
I am using 22 ,
and can you please elaborate the difference between
Theme....., BaseTheme....,Android..... themeName
And i am running android studio 1.3 and using the latest versions(Stable) of the SDK,SDK build and SDK-Platform tools.
Thank you !
Sorry , I found the issue , My activity was extending AppCompatActivity instead of the general activity ,I get it now
When ever working with custom styles you have to take care of the parent you are providing. Try to change the parent theme and it might solve your problem.

Android API level 21 backward compatibility? (Since the new update of the SDK came out)

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/

Navigation drawer styles API 8

I have integrated navigation drawer in my app with android-support v7 for minSdkVersion="8" devices. I want to customize navigation bar´s theme but if I use the following code I can´t because requires API level 11, how can I do? Thank you
<style name="MyActionBar" parent="#android:style/Widget.Holo.ActionBar">
<item name="android:background">#drawable/press</item>
</style>
See the documentation here:
https://developer.android.com/training/basics/actionbar/styling.html
In particular, look at the Theme.AppCompat part.
As you note the parent theme requires API 11. To avoid this use one of the AppCompat themes that are included in the v7-support-library, defined in the R.style resource

Android - if I support Android 1.6, can I still use a Holo Theme for newer phones?

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

Categories

Resources