问题
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?
回答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.
回答2:
I had to explicitly define theme for every <activity>
.
回答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.
回答4:
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.
回答5:
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.
来源:https://stackoverflow.com/questions/4947720/android-theme-not-being-set