I\'ve been able to override any themes that have names with \"android:\" prepended to them, but the Android themes.xml also defines properties that don\'t seem to be able to
You can overwrite standard attributes the same way you modified such properties as windowNoTitle
, just don't forget to add android:
prefix like this:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="SEclubTheme" parent="@android:style/Theme">
<item name="android:colorForeground">@color/bright_foreground_dark</item>
<item name="android:colorBackground">@color/background_dark</item>
</style>
</resources>
Without the attr prefix, your colorBackground becomes an attribute that you need to define. Consider the following example where theme_dependent_icon
is defined in a styles.xml
:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<declare-styleable name="custom_menu">
<attr name="theme_dependent_icon" format="reference"/>
</declare-styleable>
<style name="MyDarkTheme" parent="android:Theme" >
<item name="theme_dependent_icon">@drawable/ic_search_dark</item>
</style>
<style name="MyLightTheme" parent="android:Theme.Light" >
<item name="theme_dependent_icon">@drawable/ic_search_light</item>
</style>
</resources>
Then, you can use the attribute via ?attr/theme_dependent_icon
in your main_activity.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="?attr/theme_dependent_icon" />
</LinearLayout>
In this example, because I used custom theme names MyDarkTheme
and MyLightTheme
, they need to be selected during onCreate
of your main activity prior to setContentView
, i.e.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.MyDarkTheme); // causes ic_search_dark.png to be shown
// setTheme(R.style.MyLightTheme); // causes ic_search_light.png to be shown
setContentView(R.layout.main_activity);
}
Calling setTheme() is one way of selecting a theme during runtime. Another way is to define multiple versions of styles.xml
in your resources under the values
, values-11
, values-14
corresponding to default theme, theme for Android 3.0 (API-11) and theme for Android 4.0 (API-14).