Android theme not being set

19,073

Solution 1

I've been struggling with this as well, and think I've finally found what may have been the problem - perhaps it is the same.

I had the custom theme defined in the res\values folder, but not in the values-v11 and values-v14 folders. Which I think made it so that in some devices (specially the 2 I was testing with!), the theme could not be applied because it did not exist.

I now see the properties set in my custom theme (applied at the application level) taking effect.

Solution 2

I had to explicitly define theme for every <activity>.

Solution 3

According to this answer, it appears that it isn't possible to provide layout_width and layout_height through styles. While it compiles, the exception it raises is:

E/AndroidRuntime(4117): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.MainActivity}:
java.lang.RuntimeException: Binary XML file line #79: You must supply a
layout_width attribute.

I'm not sure why that is, but there might be a workaround. As this question suggests, you might be able provide a reference as the width and height parameter.

Again, my experiences are that Android doesn't properly support providing the widget dimensions through styles.

Share:
19,073
Ross
Author by

Ross

Updated on June 06, 2022

Comments

  • Ross
    Ross about 2 years

    I have a theme that refuses to be applied to activities - none of the styles are applied. If I don't supply the layout_width/layout_height attributes for <Button> it also gets a runtime error, showing that the Button class isn't being applied.

    /res/values/themes.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="Theme" parent="android:style/Theme.Black">
            <item name="android:windowNoTitle">true</item>
            <item name="android:buttonStyle">@style/Button</item>
            <item name="android:windowBackground">@color/page_background_light</item>
            <item name="android:textAppearance">@style/TextAppearance</item>
        </style>
    </resources>
    

    /res/values/styles.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="TextAppearance" parent="@android:style/TextAppearance">
            <item name="android:textSize">12sp</item>
            <item name="android:textColor">@color/darkblue</item>
        </style>
        <style name="Button" parent="@android:style/Widget.Button">
            <item name="android:layout_width">fill_parent</item> 
            <item name="android:layout_height">wrap_content</item>
            <!--<item name="android:textColor">#3C2F4F</item>
            <item name="android:textSize">20dip</item>-->
        </style>
    </resources>
    

    and the relevant manifest setting:

    <application android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@style/Theme">
    

    What's the obvious mistake I'm missing?

  • Rolf ツ
    Rolf ツ almost 12 years
    As long as your xml file is in the values folder everything should be fine, and the name of the file should not make a difference.
  • dennisdrew
    dennisdrew almost 12 years
    After looking over the official documentation, you are correct. However, I do spy another possible error. Updating now.
  • Richard
    Richard over 10 years
    Thank you! I just about went crazy trying to figure out what I was doing wrong.
  • Bayar Şahintekin
    Bayar Şahintekin over 2 years
    There should be a way we can mange entire theme from one xml file.