Ross
Ross

Reputation: 46997

Android theme not being set

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?

Upvotes: 21

Views: 21377

Answers (5)

Ana M
Ana M

Reputation: 467

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.

Upvotes: 23

dennisdrew
dennisdrew

Reputation: 4399

EDIT: I'm not sure if this was just a typo in the question, but in your main theme you reference Android's Theme.Black style incorrectly. Your code says:

<style name="Theme" parent="android:style/Theme.Black">

When it should say:

<style name="Theme" parent="@android:style/Theme.Black">

I feel like Lint or the compiler would bark at you for that before running the application, but maybe that will help.

Upvotes: 0

Paul Lammertsma
Paul Lammertsma

Reputation: 38252

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.

Upvotes: 3

delor
delor

Reputation: 800

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

Upvotes: 4

Richard Lalancette
Richard Lalancette

Reputation: 2391

Just out of curiosity. Try renaming your Theme to something else like FooBar.

Going to state the obvious here, but make sure your button is using the right style.

Upvotes: 0

Related Questions