If you are developing a theme based application to enhance user experience, then following steps needs to follow.
We are taking example of an android application having 2 themes white and black.
Step 1:
Define 2 themes in your application's styles.xml file
<style name="SampleAppBlackTheme">
<item name="ic_action_accept">@drawable/ic_action_accept</item>
<item name="ic_action_cancel">@drawable/ic_action_cancel</item> <item name="ic_action_delete">@drawable/ic_action_delete</item>
</style>
<style name="SampleAppWhiteTheme">
<item name="ic_action_accept">@drawable/ic_action_accept_white</item> <item name="ic_action_cancel">@drawable/ic_action_cancel_white</item> <item name="ic_action_delete">@drawable/ic_action_delete_white</item>
</style>
Step 2:
Define a default theme for MainActuvity in android manifest:
<activity
android:name=".MainActivity"
android:screenOrientation="portrait"
android:theme="@style/SampleAppBlackTheme" android:windowSoftInputMode="stateHidden|adjustNothing" >
.........
</activity>
Step 3:
Based on User choice of theme, set theme programmatically in onCreate() method of respective activity:
@Overrideprotected void onCreate(Bundle savedInstanceState) { overridePendingTransition(0, 0); if (Constants.GO_WHITE) setTheme(R.style.SampleAppWhiteTheme);
else
setTheme(R.style.SampleAppBlackTheme);
........
}
P.s.
In case of multiple activities, define 2 themes for each activity
Step 4:
Define the common items in the attrs.xml as below :
<attr name="ic_action_accept" format="reference" /> <attr name="ic_action_cancel" format="reference" /> <attr name="ic_action_delete" format="reference" />
Step 5:
Use the defined attributes in the layout xml file or use programmatically in any view as per below example.
Layout example :
<ImageView
android:id="@+id/accept_icon"
android:layout_width="@dimen/abc_action_button_min_width"
android:layout_height="@dimen/abc_action_bar_default_height_material" android:src="?attr/ic_action_accept"
android:visibility="visible" />
Fragment or View example :
int[] attrs = new int[]{R.attr.ic_action_accept}; TypedArray typedArray = getActivity().obtainStyledAttributes(attrs); Drawable ic_action_accept = typedArray.getDrawable(0);
These attribute will be resolved in styles.xml file and return the drawable or color as per the current theme of the activity.
That's how multiple themes can be supported. In case of any questions please comment.