没有设置Android主题

时间:2011-02-09 16:34:09

标签: android themes android-manifest android-styles

我有一个拒绝应用于活动的主题 - 没有应用任何样式。如果我没有为layout_width提供layout_height / <Button>属性,则会收到运行时错误,表明未应用Button类。

/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>

以及相关的清单设置

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

我错过了哪个明显的错误?

5 个答案:

答案 0 :(得分:21)

我一直在努力解决这个问题,并且认为我终于找到了可能存在的问题 - 也许它是一样的。

我在res\values文件夹中定义了自定义主题,但在values-v11values-v14文件夹中没有。我认为这使得在某些设备(特别是我正在测试的2个!)中,主题无法应用,因为它不存在。

我现在看到我的自定义主题中设置的属性(在应用程序级别应用)生效。

答案 1 :(得分:4)

我必须为每个<activity>明确定义主题。

答案 2 :(得分:3)

According to this answer,似乎无法通过样式提供layout_widthlayout_height。在编译时,它引发的例外是:

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.

我不确定为什么会这样,但可能有一种解决方法。 As this question suggests,您可以提供参考作为宽度和高度参数。

同样,我的经验是Android不能正确支持通过样式提供小部件维度。

答案 3 :(得分:0)

出于好奇。尝试将您的主题重命名为FooBar等其他内容。

在这里说明显而易见,但请确保您的按钮使用的是正确的样式。

答案 4 :(得分:0)

编辑:我不确定这是否只是问题中的拼写错误,但在您的主题中,您错误地引用了Android的Theme.Black样式。你的代码说:

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

应该说:

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

我觉得Lint或编译器会在运行应用程序之前咆哮你,但也许这会有所帮助。