在 21 android 以下的 api 上更改状态/通知栏颜色?

Posted

技术标签:

【中文标题】在 21 android 以下的 api 上更改状态/通知栏颜色?【英文标题】:Change status / notification bar color on api below 21 android? 【发布时间】:2015-05-28 16:52:52 【问题描述】:

我在一些应用程序中看到状态栏颜色可以更改并与 api 级别 21 中所做的匹配。

我搜索并找到了这个解决方案 Source

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
<!-- Set AppCompat’s color theming attrs -->
<item name="colorPrimary">@color/my_awesome_red</item>
<item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
<!-- Other attributes -->
</style>

但它不起作用

这是我的风格代码

<style name="ToolbarTheme" parent="Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/ColorPrimary</item>
    <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>

【问题讨论】:

StatusBar 在 api-level 21 之前无法着色。 这个怎么样?? developer.android.com/training/material/… 请看StackO-Post 我明白这一点。但我见过带有彩色状态栏的应用程序。例如索尼随身听应用程序。 索尼设备上的系统应用是什么,不是吗?索尼很可能对系统本身进行了更改。不幸的是,您作为开发人员不能使用这些。 【参考方案1】:

如果您指的是 AcionBar 的颜色,您可以使用以下代码以编程方式更改颜色:

getSupportActionBar().setBackgroundDrawable(new Color.Drawable(Color.rgb(120,0,47)));

更改数字以选择您自己的颜色。

【讨论】:

不,我说的不是操作栏,而是状态/通知栏颜色 好的,试试这个***.com/questions/22192291/… 我想要棒棒糖前的支持。我知道如何用棒棒糖做。【参考方案2】:

StatusBar 仅适用于 API 级别超过 21 的设备。如果您的最低 API 级别低于该级别,那么您必须在 java 源文件中进行一些更改。转到要添加状态栏颜色的源文件。然后用注解@TargetApi(Build.VERSION_CODES.LOLLIPOP) 包装OnCreate() 方法。

然后在方法内部你必须检查设备是否有能力,如下所示。

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
 window.setStatusBarColor(getResources().getColor(R.color.Statusbar));
    

希望它有效..!!

【讨论】:

这真的没有回答原来的问题,他们似乎已经知道你可以在 Lollipop 及更高版本上以这种方式更改状态栏。我能找到这类作品的唯一解决方案是这个库:github.com/jgilfelt/SystemBarTint

以上是关于在 21 android 以下的 api 上更改状态/通知栏颜色?的主要内容,如果未能解决你的问题,请参考以下文章

Android:API 级别低于 21 的状态栏颜色更改

如何在 Android 中更改状态栏图标的颜色?

Android 5.0(API 21)以下系统兼容(retrofitokhttp)

在android中的更改活动上滑动xml动画

Android 已弃用 android.hardware.Camera,现在建议使用 android.hardware.camera2 但这在 API 21 以下的任何内容中均不可用

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