如何在 android studio 中使用 AppCompat 类更改通知栏的颜色?

Posted

技术标签:

【中文标题】如何在 android studio 中使用 AppCompat 类更改通知栏的颜色?【英文标题】:How to change the color of notification bar using AppCompat class in android studio? 【发布时间】:2016-05-08 05:14:00 【问题描述】:

我想在 api 级别为 21 或更高时更改状态栏的颜色。它不适合我。我也在使用supportActionBar。我正在使用以下代码:

values/styles.xml

<?xml version="1.0" encoding="utf-8" ?>
<resources>
  <style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    !-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="windowNoTitle">true</item>
    <!-- colorPrimary is used for the default action bar background -->
    <item name="colorPrimary">@color/primary</item>
    <!-- colorPrimaryDark is used for the status bar -->
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <!-- colorAccent is used as the default value for colorControlActivated
         which is used to tint widgets -->
    <item name="colorAccent">@color/accent</item>
    <!-- You can also set colorControlNormal, colorControlActivated
         colorControlHighlight and colorSwitchThumbNormal. -->
     <item name="android:textColorPrimary">@color/primary_text</item>
     <item name="android:textColorSecondary">@color/secondary_text</item>

  </style>

  <!-- Application theme. -->
  <style name="MyTheme" parent="MyTheme.Base">
  </style>

  <style name="MyTheme.ToolBar" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@android:color/white</item>
    <item name="android:textColorSecondary">@android:color/white</item>
  </style>

  <style name="MyTheme.NavMenu" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@color/gray</item>
  </style>

  <style name="MyTheme.RightMenu" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@color/black</item>
  </style>
</resources>

在清单文件中我设置了android:theme="@style/MyTheme"

values-v21/styles.xml

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyTheme" parent="MyTheme.Base">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/primary_dark</item>
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>

这是我的颜色文件:

<resources>
  <color name="primary">#3F51B5</color>
  <color name="primary_dark">#303F9F</color>
  <color name="primary_light">#C5CAE9</color>
  <color name="accent">#FFC107</color>
  <color name="primary_text">#212121</color>
  <color name="secondary_text">#727272</color>
  <color name="icons">#FFFFFF</color>
  <color name="divider">#B6B6B6</color>
</resources>

我的样式有什么问题,为什么不改变状态栏颜色??

【问题讨论】:

在你的 values-v21 文件中使用 @color/xxx @GabrieleMariotti 不起作用。 【参考方案1】:

状态栏颜色可以通过colorPrimaryDark设置,

在你的 values-v21/styles.xml 添加

<resources>
<style name="AppTheme" parent="AppTheme.Base">
    <item name="android:colorPrimaryDark">@color/colorPrimary</item>
<item name="android:colorPrimaryDark">@color/colorPrimayDark</item>
</style></resources>

YourActivity 扩展了 AppCompatActivity

【讨论】:

首先你的xml有错误,其次它不起作用。 尝试从 v21 中删除 statusBarColor【参考方案2】:

当我使用 Xamarin 时,在基本活动中添加这些行解决了问题:

Window window = this.Window;
window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);

对于 Java refer to this question on SO。

【讨论】:

【参考方案3】:

改变你的

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorPrimaryDark">@color/primary_dark</item>

【讨论】:

我不能使用DarkActionBar,因为我正在使用支持操作栏。 将此添加到您的styles.xml &lt;item name="android:colorPrimary"&gt;@color/primary&lt;/item&gt; &lt;item name="android:colorPrimaryDark"&gt;@color/primary_dark&lt;/item&gt; 阅读这篇文章chris.banes.me/2014/10/17/appcompat-v21,也许你会发现一些有用的东西。 那里没有什么新鲜事。【参考方案4】:

状态栏颜色取自您的应用样式的colorPrimaryDark 颜色值。只需将其更改为您想要操作栏的任何颜色,它就会被更改。

styles.sml

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <!--This is your default actionbar color-->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    </style>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--change this to whatever you need-->
    <color name="colorPrimary">#03A9F4</color>
    <color name="colorPrimaryDark">#0277BD</color
</resources>

【讨论】:

我发布了我的颜色文件,我的有什么问题吗?? 好吧,我使用相同的代码集并且对我来说效果很好。我会试试你的样式代码并检查。 解决了。请检查我的答案。显然这是来自支持库的 Appcompat v7 的一个已知问题。 你在哪里发布了答案?

以上是关于如何在 android studio 中使用 AppCompat 类更改通知栏的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Android studio“MethodHandle.invoke 和 MethodHandle.invokeExact 仅支持从 Android O (--min-api 26) 开始”构建 AP

元素将无法在Constraintlayout Android Studio中正确居中

如何修复 Android Studio 中的 INSTALL_FAILED_INVALID_APK 错误?

android studio怎么添加sdk依赖

android studio怎样生成apk文件

Android studio安装教程