检测设备中是否存在 Material You

Fur*_*kul 7 android material-design material-you

所以,我的老板让我分析从Android 12开始如何实现Material You颜色。我一直在研究它,每个页面的每个博客关于“如何做”都告诉你,你需要在家里按住屏幕,然后转到“壁纸和风格”并更改壁纸。但有一个问题。

我记得当 Android 12 处于 Beta 阶段时,它支持 Material You 颜色。但是(我假设)正式发布后,此支持已被删除,因为我找不到该选项。这是我在主屏幕上按住时的样子:

图像

它显示“壁纸”,当我单击它时,它不会打开名为“壁纸和样式”的菜单,它只是重定向到“动态壁纸”。我在 Android 12 官方版本中找不到壁纸颜色选项。然而,它出现在即将推出的 API 32(我认为是 Android 13)模拟器上。

经过一番研究,我发现系统会在系统资源下生成壁纸颜色,system_accent1_600这些资源从 API 31 开始可用(更多信息请参见此处)。当我使用处于测试版的 API 32 模拟器时,这确实有效,但它默认为其他颜色(强调色上的蓝色阴影,中性色上的灰色阴影,又称背景色),我还没有弄清楚从哪里来在 API 31 官方模拟器上。

这是问题:

从 Android 12 (API 31) 开始是否正式支持Material You 颜色?如果是的话,为什么我在Android官方模拟器上找不到它?

另外,是否可以检测设备是否支持具有不同选项的Material You 颜色?

Suj*_*mar 3

我想这就是您正在寻找的:

public static boolean isDynamicColorAvailable() 
{
    return VERSION.SDK_INT >= VERSION_CODES.S && DYNAMIC_COLOR_SUPPORTED_MANUFACTURERS.contains(Build.MANUFACTURER.toLowerCase());   
}
Run Code Online (Sandbox Code Playgroud)

在com.google.android.material.color 的DynamicColors类中找到了这个

您可以简单地这样调用它:

boolean isdca = DynamicColors.isDynamicColorAvailable();
Run Code Online (Sandbox Code Playgroud)

我希望这能回答最后一部分。