Android主题未设置

21

我有一个主题,它拒绝应用于活动 - 没有任何样式被应用。如果我不为 <Button> 提供 layout_width/layout_height 属性,它也会出现运行时错误,显示 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">

我忽略了什么明显的错误?


我现在正在处理完全相同的问题。你确定可以将主题放在单独的文件中吗?我尝试将主题设置为活动(而不是应用程序),并尝试在onStart中以编程方式应用它,但没有成功... - katit
嗯,我认为我们有更大的问题。我尝试从parent="android:Theme.Light.NoTitleBar.Fullscreen"继承,然后我的活动就全屏了。但是我的按钮和ListView样式仍未应用。所以,似乎主题“应用”了,但不是所有项目都被包含在内。 - katit
5个回答

23

我也曾经遇到过这样的问题,后来发现可能是以下原因导致的 - 可能是相同的原因。

我把自定义主题定义在res\values文件夹中,但没有放在values-v11values-v14文件夹中。这可能导致在某些设备上(尤其是我测试的两个设备!)无法应用主题,因为它不存在。

我现在看到我应用于应用程序级别的自定义主题设置生效了。


谢谢!我差点疯了,试图找出我做错了什么。 - Richard
我们应该有一种方法可以从一个XML文件中管理整个主题。 - Bayar Şahintekin

4

我必须为每个<activity>显式定义主题。


3
根据这个答案,似乎不能通过样式提供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.

我不确定这是为什么,但可能有解决方法。正如这个问题所建议的,你可以在宽度和高度参数中提供引用。
再次强调,我的经验是Android不能正确支持通过样式提供控件尺寸。

0

编辑:我不确定这是否只是问题中的一个打字错误,但在您的主题中,您错误地引用了Android的Theme.Black样式。您的代码如下:

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

应该这样说:

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

我觉得在运行应用程序之前,Lint或编译器可能会对此发出警告,但也许这会有所帮助。


1
只要你的xml文件在values文件夹中,一切都应该没问题,文件的名称不应该有影响。 - Rolf ツ
在查看了官方文档后,你是正确的。不过,我发现另一个可能的错误。正在更新中。 - dennisdrew

0

只是出于好奇。尝试将您的主题重命名为其他名称,如FooBar。

这里要明确一下,确保您的按钮使用正确的样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接