初级暗的颜色是渐变的

Chi*_*giz 5 android statusbar android-studio

我最近想让我的状态栏颜色渐变.我知道WindowManager的工作方式.但我决定找另一种方法用渐变为我的状态栏着色.

所以我这样做了,

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">@drawable/gradient</color>
   <color name="colorAccent">#FF4081</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

@绘制/梯度

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
   <gradient android:angle="135" android:startColor="#f56f2c" android:endColor="#fa9f46"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

@ drawable/gradient是我设置的渐变颜色.虽然IDE说它不是正确的方法,但它是有效的.

我的问题:这是正确的方法吗?有没有人有这种经历?

Aba*_*Aba 3

从 Android N (API 25) 开始,这将中断并出现以下错误:

android.content.res.Resources$NotFoundException: Can't find ColorStateList from drawable resource ID...
Run Code Online (Sandbox Code Playgroud)

这与这个SO 问题几乎是相同的错误,并且正如答案所指出的,错误/崩溃是故意的。我猜原因是 Android 之神现在严格禁止您对 @color 资源使用除颜色以外的其他内容。所以,这绝对不是“正确的方法”。

解决方法是使用自定义工具栏,您可以在其中使用可绘制渐变作为背景。

我确实在 SO 上尝试了另一个解决方案,它声称适用于 API 24+,但遗憾的是它在 API 25 和 26 中中断。它看起来确实像是 Android 应该简单地使用的东西,但事实并非如此。