Search code examples
androidandroid-searchmanagerandroid-theme

Android Styling/Theming of just Search Dialog


tl;dr: White text style in app theme being picked up by search dialog, making search text invisible.

I'm struggling mightily with what seems like a trivial issue.

My app is using a dark background, and I've tweaked the text color to be brighter than the standard gray using #EEEEEE.

I've implemented a Search Dialog (pre-Honeycomb) and it works well, but the text in the search dialog picks up the same #EEEEEE so it is essentially invisible. Even the context menu displayed when I long press the search text picks up #EEEEEE, so the text there is invisible as well.

I'm tearing my hair out, and I'm running out of hair.

Style:

<style name="master" paret="@android:style/Theme.NoTitleBar">
    <item name="android:textColor">#EEEEEE</item>
    <item name="android:windowNoTitle">true</item>        
</style>

Manifest:

<application android:icon="@drawable/icon"
             android:label="@string/app_label"
             android:theme="@style/master"
             android:hardwareAccelerated="true"
             android:debuggable="true"> 

Solution

  • The attribute android:textColor is not meant to be used inside theme styles, it is primarily useful in widget and text appearance styles.

    If you want to change the general text colors through a theme, use instead the android:textColor* family of attributes. There are quite a few of them, and different Views use them differently, so it takes a bit of experimentation (or careful studying of the Android source code) to to get it all right. The android.R.attr documentation lists them all. Look for the attributes that begin with textColor....

    To get you started, try this theme, it will behave better by not affecting the Search Dialog colors at all, which seems to be what you want. By the way, you don't need to set android:windowNoTitle to true in your theme as your parent theme does that already:

    <style name="master" parent="@android:style/Theme.NoTitleBar">
        <item name="android:textColorPrimary">#EEEEEE</item>
        <item name="android:textColorSecondary">#EEEEEE</item>
        <item name="android:textColorTertiary">#EEEEEE</item>
    </style>