What is Theme Chooser?
Theme chooser is an app, originally built by T-Mobile and open sourced, that can be baked in to a rom that allows several elements of the UI to be themed on the fly by installing special theme apps.
How can I get it?
Theme chooser has to be built in to a rom; it can't be installed separately. CyanogenMod 7
is the biggest rom to use it, but there are other smaller, device specific roms that have integrated it. Search on your device's section here on XDA, or ask in its Q&A section (not
in development) to find out if your device has a rom that supports Theme chooser.
How do I install themes?
Theme chooser themes are just apps, so you would install them as you would any other app. Many themes listed here are published in the market, and can be installed (and in some cases, purchased) exactly as any other app. Many others are hosted right here on XDA, or on other forums, and would have to be sideloaded. This means enabling installation of apps from unknown sources in your phone's application settings, and either downloading the app to your phone, or transferring it via USB, SD card, dropbox, etc. Then it can be installed from most file manager apps.
How do I switch themes?
You should see an app on your phone called Theme Chooser. In here you will see a coverflow style listing of all the themes currently installed on your device. Just swipe to the one you want, and hit Apply to enable it. Most elements of the theme will be applied immediately, but some require a restart to take effect (some notification bar changes and app icons in particular).
I'm missing a theme in my Theme chooser.
First, make sure you actually installed it. Check in your phone's Settings -> Applications -> Manage applications and make sure that it is listed there.
If you still aren't seeing it, it may be that the theme was created without a preview image. Most of the time, these themes were created with the Ultimate Online Theme Kitchen, which provides an option to not create a preview image, which seems to help with compatibility. Themes without a preview image show up in the Theme chooser app, but since the preview image has a width of essentially 0, they are very easy to skip over. Look for a break in the numbering at the top (1/10, 2/10, 4/10) for a clue as to where it may be, then swipe to it very carefully (or use a trackball or arrow keys if you have them).
Note: this may have been fixed in newer CM7 nightlies. I just looked at my heroc running the latest nightly and themes without previews are now showing a full size blank preview image.
HDPI, MDPI, LDPI, what do these mean?
These are abbreviations for high, medium, and low dots per inch, respectively. This is also known as "screen density". Google uses these to broadly classify screens of varying physical size and resolution so app developers can optimize layouts and resources for different classes of devices. See Supporting Multiple Screens
for more details.
The different density classes correspond to specific logical DPI values as follows:
XHDPI - 320
HDPI - 240
MDPI - 160
LDPI - 120
Since the wide variety of screen sizes and resolutions means not all devices' screen density will exactly match one of those values, the OEM will set the logical density to one of those values according to the general guidelines in the chart below.
So how do I determine what my device's density is?
There are three ways to do this, the math way, the definitive way, and the lazy way.
The math way:
First you have to determine its numerical density, in DPI. To do this you need to determine the diagonal resolution of the device by applying the Pythagorean Theorem.
Dr = sqrt(width^2 + height^2)
Then simply divide the diagonal resolution by the diagonal physical screen size.
Dpi = Dr / Ds
For my heroc
, with a physical screen size of 3.2" and 320x480 resolution, this is the calculation:
Dr = sqrt(width^2 + height^2)
Dr = sqrt(320^2 + 480^2)
Dr = sqrt(102400 + 230400)
Dr = sqrt(332800)
Dr = 576.89
Dpi = Dr / Ds
Dpi = 576.89 / 3.2
Dpi = 180.28
According to Google's guidelines (see image above), that puts the heroc solidly in MDPI territory. Remember, though, that its actually up to the OEM to determine the logical density; even though 180dpi looks to be in the MDPI range, HTC could have set its logical density to 240dpi, making it an HDPI device. Generally, all the OEMs follow the guidelines, with the original Galaxy Tab being the most famous exception. Its 7", 1024x600 screen gives it a physical density of 170dpi, but Samsung set its logical density to 240dpi, to make it HDPI.
This leads us to...
The definitive way
As we've seen, most devices follow the guidelines laid out by Google for setting a logical density based on a physical density. However, the only way to be certain is to look at the logical density setting directly.
This is done by looking at the build.prop file, located in the /system directory. Using a file explorer app (I like root explorer), navigate to the /system directory and open the build.prop file in a text viewer. We're looking for a line like this:
ro.sf.lcd_density = xxx
The value there in place of "xxx" is your logical density. If this line isn't present, then Android defaults to 160. This is the only way to know for sure, in case the manufacturer didn't follow the guidelines, or if your physical density is in the gray area between two classes.
The lazy way
Google it. Or search in your device's section here on XDA. Or if neither of those pans out, ask in the Q&A section in your device's forum (not
I created a theme, how can I get it added to the list?
Send me a pm, or reply to the thread with the details. Make sure you let me know what screen densities your theme supports, if its not evident from the link.
I sent you a pm to add my theme 5 minutes ago, why isn't it up yet?????
It's not because I don't like you, it's just easier for me to add several to the list at once, so I generally just do it once or twice a week. In addition to adding themes people have told me about, I also spend some time searching the market, Google, and the Android Themes section here on XDA for new ones.