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?
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.
I had to explicitly define theme for every <activity>
.
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.
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.
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.