[Android Themes] Quinny899:
THIS THEME IS FOR MORE EXPERIENCED THEMERS ONLY!

Adding a Holo ActionBar to an app using Theme Chooser

Apps this is known not to work with:

WinAmp

Tapatalk

TubeMate

What does this do?

So you have an app that's made for Gingerbread, but you're using ICS or JB? Doesn't look as nice as it should does it?

Some of you might have seen my theme Holo Fixer, which automatically attempts to make those apps use Holo. In some cases, it works just fine. But it's not complete that way. If you wish to get more out of it, this guide will help you.

Screenshots of the outcome

A before and after screenshot:

Before

After

(This is the XDA RC blog app, which I'll be using in the guide)

Guide

1.) Start with your theme, make sure it's minSdkVersion is 14 or above and that you're building for ICS or above

2.) Pull the apk of your 'target app' from your phone/tablet, for example with the xda RC app:

adb pull /data/app/com.xda.rc.blog-1.apk

3.) Using apktool, decompile that app

sudo java -jar apktool.jar d -s com.xda.rc.blog-1.apk

(No need for source, so use the -s tag to skip it)

4.) Firstly open the AndroidManifest.xml file and look for a "android:theme" tag, within the main activity area. That should be the theme being used by default for the app. If it isn't there (if the app uses code to set the theme it's unlikely it will have the tag), proceed to the next steps anyway, you may still be in luck. However, if it refers to "@android:style", you're out of luck, sorry :(

5.) Open the res/values/styles.xml of the app

6.) Search for the name of the style that matches the main theme of the app we found earlier. If you couldn't find it, look for a generic style that's likely to be the main theme. In the xda RC app, the main theme styles are the following:

<style name="Theme_Light" parent="@*android:style/Theme.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="Theme_Dark" parent="@*android:style/Theme.Black">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

If there are more than one, that's fine, continue.

7.) Copy the main theme styles to your theme's styles.xml, and rename them so they won't clash with other app's styles

<style name="Theme_Light_XDARC" parent="@*android:style/Theme.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="Theme_Dark_XDARC" parent="@*android:style/Theme.Black">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

8.) Change the parent theme to be its Holo equivalent:

<style name="Theme_Light_XDARC" parent="@*android:style/Theme.Holo.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="Theme_Dark_XDARC" parent="@*android:style/Theme.Holo">
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>

9.) If it has tags that hide the title, remove them:

<style name="Theme_Light_XDARC" parent="@*android:style/Theme.Holo.Light">
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="Theme_Dark_XDARC" parent="@*android:style/Theme.Holo">
<item name="android:windowContentOverlay">@null</item>
</style>

Leave the rest of the style in-tact though

10.) Make a new xml file in your theme's res/xml, using the package name, without the -1 or -number tags, and using _ rather than . For example, the xda RC app would be:

com_xda_rc_blog

11.) Add the default resource redirect tags:

<?xml version="1.0" encoding="utf-8"?>
<resource-redirections>

</resource-redirections>

12.) Between the <resource-redirections> tags, add the following, replacing the "styleNameHere" with the original theme name, from the original app's styles.xml and the "modStyleNameHere" with the name of your theme name, from your theme's styles.xml

<item name="style/styleNameHere">@style/modStyleNameHere</item>

For example, the xda RC app's redirecion would be:

<item name="style/Theme_Light">@style/Theme_Light_XDARC</item>

Note: If there's more than one theme being modified, you must redirect all the styles you are redirecting.

The full xml of the xda RC app can be found here, with different style names (my naming system is weird :silly:), and it also includes resource redirections, you don't need those yet.

13.) If you do not wish to customize your action bar at all, you are done here. If you do, proceed to post 2
​