【问题标题】:When dynamically changing theme colourPrimaryDark is not taking effect动态更改主题 colourPrimaryDark 未生效时
【发布时间】:2015-03-03 09:34:58
【问题描述】:

我有一个应用程序需要根据用户的选择应用不同的主题。所以,我创建了主题。通过 Manifest.xml 应用这些主题时可以正常工作。但是当我尝试以编程方式更改主题时,只有 ActionBar 颜色发生变化,状态栏颜色与我在 Manifest.xml 中应用的主题保持一致。我的代码在下面。我已经尝试了所有可用的资源,但没有找到任何解决方案。

提前致谢。

themes.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!--<Cyan Theme Configuration>-->

    <style name="Theme.Cyan" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary_color_cyan_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_cyan_variant</item>

        <item name="colorAccent">@color/accent_color_for_cyan_variant</item>

        <item name="android:icon">@drawable/ic_launcher</item>


    </style>
    <style name="Theme.Cyan.ToolBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color_cyan_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_cyan_variant</item>

        <item name="colorAccent">@color/accent_color_for_cyan_variant</item>


    </style>

    <style name="Theme.Cyan.ToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@color/primary_color_cyan_variant</item>
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorSecondary">@color/primary_color_dark_cyan_variant</item>

    </style>

    <!--<Blue Theme Configuration>-->

    <style name="Theme.Blue" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary_color_blue_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_blue_variant</item>

        <item name="colorAccent">@color/accent_color_for_blue_variant</item>
        <item name="android:icon">@drawable/ic_launcher</item>


    </style>
    <style name="Theme.Blue.ToolBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color_blue_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_blue_variant</item>

        <item name="colorAccent">@color/accent_color_for_blue_variant</item>


    </style>

    <style name="Theme.Blue.ToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@color/primary_color_blue_variant</item>
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorSecondary">@color/primary_color_dark_blue_variant</item>

    </style>

    <!--<Teal Theme Configuration>-->

    <style name="Theme.Teal" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary_color_teal_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_teal_variant</item>

        <item name="colorAccent">@color/accent_color_for_teal_variant</item>
        <item name="android:icon">@drawable/ic_launcher</item>


    </style>
    <style name="Theme.Teal.ToolBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color_teal_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_teal_variant</item>

        <item name="colorAccent">@color/accent_color_for_teal_variant</item>


    </style>

    <style name="Theme.Teal.ToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@color/primary_color_teal_variant</item>
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorSecondary">@color/primary_color_dark_teal_variant</item>

    </style>

    <!--<Green Theme Configuration>-->

    <style name="Theme.Green" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary_color_green_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_green_variant</item>

        <item name="colorAccent">@color/accent_color_for_green_variant</item>
        <item name="android:icon">@drawable/ic_launcher</item>


    </style>
    <style name="Theme.Green.ToolBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color_green_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_green_variant</item>

        <item name="colorAccent">@color/accent_color_for_green_variant</item>


    </style>

    <style name="Theme.Green.ToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@color/primary_color_green_variant</item>
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorSecondary">@color/primary_color_dark_green_variant</item>

    </style>

    <!--<BlueGrey Theme Configuration>-->

    <style name="Theme.BlueGrey" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primary_color_blueGrey_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_blueGrey_variant</item>

        <item name="colorAccent">@color/accent_color_for_blueGrey_variant</item>
        <item name="android:icon">@drawable/ic_launcher</item>


    </style>
    <style name="Theme.BlueGrey.ToolBar" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color_blueGrey_variant</item>

        <item name="colorPrimaryDark">@color/primary_color_dark_blueGrey_variant</item>

        <item name="colorAccent">@color/accent_color_for_blueGrey_variant</item>


    </style>

    <style name="Theme.BlueGrey.ToolBarStyle" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:background">@color/primary_color_blueGrey_variant</item>
        <item name="android:textColor">#FFF</item>
        <item name="android:textColorSecondary">@color/primary_color_dark_blueGrey_variant</item>

    </style>

</resources>

styles.xml

 <resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.Green">
        <!-- Customize your theme here. -->
    </style>
    <style name="Ocean" parent="Theme.Cyan"/>
    <style name="Sky" parent="Theme.Blue"/>
    <style name="Peacock" parent="Theme.Teal"/>
    <style name="AppTheme.Grass" parent="Theme.Green"/>
    <style name="Shadow" parent="Theme.BlueGrey"/>

    <style name="menu_labels_style">
        <!--<item name="android:background">@drawable/fab_label_background</item>-->
        <item name="android:textColor">@color/white</item>
    </style>
</resources>

Manifest.xml

<application
        android:name="com.compassites.employeedirectory.EmployeeDirectoryApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

MainActivity.java

    super.onCreate(savedInstanceState);
    setTheme(R.style.Ocean);
    setContentView(R.layout.activity_main);

【问题讨论】:

  • 尝试使用新主题重新启动活动。
  • 抱歉,我没听懂。我想动态改变主题!!
  • 显示代码你是如何改变主题的
  • @Apurva,它已经在 ManiActivity.java 中了

标签: android android-layout android-activity android-actionbar android-manifest


【解决方案1】:

在 super.onCreate 之前调用设置主题 即

setTheme(R.style.Ocean);
super.onCreate(savedInstanceState);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2019-12-12
    • 2012-06-23
    • 2017-11-07
    • 2021-01-27
    • 1970-01-01
    相关资源
    最近更新 更多