【问题标题】:Custom theme of ActionBar (V7) doesn't workActionBar (V7) 的自定义主题不起作用
【发布时间】:2014-11-26 04:10:40
【问题描述】:

我在我的应用程序中使用 ActionBar。我定制了自己的操作栏主题,就像 android 开发者网站所说的那样。不幸的是,我的风格无论如何都行不通。每次运行我的应用程序时,都会抛出 IllegalStateException。详细信息是“您需要在此活动中使用 Theme.AppCompat 主题(或后代)。”。然后,我的自定义样式就在这里了:

<resources>

    <!-- the theme applied to the application or activity -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">#8FB01C</item>
        <!-- colorPrimaryDark is used for the status bar -->
        <item name="colorPrimaryDark">#CCE96B</item>
        <item name="colorAccent">#303A0A</item>
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">

        <!-- the theme applied to the application or activity -->
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item>
        <item name="android:actionMenuTextColor">@color/action_bar_text_color</item>

        <!-- Support library compatibility -->
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarTabTextStyle">@style/TabTextStyle</item>
        <item name="actionMenuTextColor">@color/action_bar_text_color</item>
    </style>
    <!-- ActionBar theme. -->
    <style name="ActionBarTheme" parent="AppTheme">
        <!-- when hide or show ActionBar frequently, use this attribute. -->
        <item name="windowActionBarOverlay">true</item>
    </style>

    <!-- general styles for the action bar -->
    <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:titleTextStyle">@style/TitleTextStyle</item>
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="android:backgroundStacked">@drawable/actionbar_background</item>
        <item name="android:backgroundSplit">@drawable/actionbar_background</item>

        <!-- Support library compatibility -->
        <item name="titleTextStyle">@style/TitleTextStyle</item>
        <item name="background">@drawable/actionbar_background</item>
        <item name="backgroundStacked">@drawable/actionbar_background</item>
        <item name="backgroundSplit">@drawable/actionbar_background</item>
    </style>

    <!-- action bar title text -->
    <style name="TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">#400040</item>
    </style>

    <!-- action bar tab text -->
    <style name="TabTextStyle" parent="@style/Widget.AppCompat.ActionBar.TabText">
        <item name="android:textColor">#400040</item>
    </style>

</resources>

我关于这个活动的清单在这里:

<activity
    android:name=".HomeActivity"
    android:label="@string/app_name"
    android:launchMode="singleInstance"
    android:theme="@style/ActionBarTheme"
    android:uiOptions="splitActionBarWhenNarrow" >
</activity>

但奇怪的是,当我将android:theme="@style/ActionBarTheme" 设置为android:theme="@style/Theme.Appcomat.Light" 时,它运行良好。但风格不是我想要的。所以,它确实让我感到困惑。所以,我想知道为什么我的自定义样式不起作用。


好的,ActionBarTheme改成这样后:

<style name="ActionBarTheme" parent="@style/Theme.AppCompat.Light">
        <item name="colorPrimary">#8FB01C</item>
        <item name="colorPrimaryDark">#CCE96B</item>
        <item name="colorAccent">#4D4DFF</item>
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:actionBarTabTextStyle">@style/TabTextStyle</item>
        <item name="android:actionMenuTextColor">@color/action_bar_text_color</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarTabTextStyle">@style/TabTextStyle</item>
        <item name="actionMenuTextColor">@color/action_bar_text_color</item>
        <item name="windowActionBarOverlay">true</item>
    </style>

效果很好。是的,这里:

<style name="ActionBarTheme" parent="AppTheme">

它不起作用。所以我想知道为什么。无法继承自定义样式、我的开发环境有问题或其他原因?

【问题讨论】:

  • 好了,ActionBarTheme改成这样后:

标签: android-theme android-actionbar-compat android-actionbaractivity


【解决方案1】:

也许这只是您的 IDE 的问题。如果您使用的是Eclipseproject-->clean,然后选择您的项目OK,您的项目将重新生成。如果您使用的是Android Studio,那么Build-->Rebuild ProjectClean Project,然后看看结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-18
    • 2016-06-15
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多