Using more than one theme in your Android application, you can add custom colors to every theme, to be like this:
First, we have to add our themes to style.xml
like this:
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
</style>
<!-- -->
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
</style>
......
Above you can see OneTheme and TwoTheme.
Now, go to your AndroidManifest.xml
and add this line:
android:theme="@style/OneTheme"
to your application tag, this will make OneTheme the default theme:
<application
android:theme="@style/OneTheme"
...>
Create new xml file named attrs.xml
and add this code :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="custom_red" format="color" />
<attr name="custom_blue" format="color" />
<attr name="custom_green" format="color" />
</resources>
<!-- add all colors you need (just color's name) -->
Go back to style.xml
and add these colors with its values for each theme :
<style name="OneTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="custom_red">#8b030c</item>
<item name="custom_blue">#0f1b8b</item>
<item name="custom_green">#1c7806</item>
</style>
<style name="TwoTheme" parent="Theme.AppCompat.Light.DarkActionBar" >
<item name="custom_red">#ff606b</item>
<item name="custom_blue">#99cfff</item>
<item name="custom_green">#62e642</item>
</style>
Now you have custom colors for each theme, let's add these color to our views.
Add custom_blue color to the TextView by using "?attr/" :
Go to your imageView and add this color :
<TextView>
android:id="@+id/txte_view"
android:textColor="?attr/custom_blue" />
Mow we can change the theme just by single line setTheme(R.style.TwoTheme);
this line must be before setContentView()
method in onCreate()
method, like this Activity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.TwoTheme);
setContentView(R.layout.main_activity);
....
}
If we want to change the theme for all activities, we have to create new class named MyActivity extends AppCompatActivity
class (or Activity
class) and add line setTheme(R.style.TwoTheme);
to onCreate() method:
public class MyActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (new MySettings(this).isDarkTheme())
setTheme(R.style.TwoTheme);
}
}
Finally, go to all your activities add make all of them extend the MyActivity base class:
public class MainActivity extends MyActivity {
....
}
In order to change the theme, just go to MyActivity and change R.style.TwoTheme
to your theme (R.style.OneTheme
, R.style.ThreeTheme
....).