kotlin 检测Android 14的动态颜色是在单色/灰度模式

ryevplcw  于 2023-05-18  发布在  Kotlin
关注(0)|答案(1)|浏览(134)

Android 14(UpsideDownCake)有一个单色/灰度动态颜色主题,可以在1中看到,我如何检测模式,以便我可以对模式进行进一步的调整,例如。在这种模式下制作不使用R.color.system_* 的UI元素,如UI图像?

(Android 14的预览图像截图由我)

7hiiyaii

7hiiyaii1#

这个答案有望随着Android 14的最终版本更新,但显然每个this都会有AccessibilityManager.getUiContrast(),我现在找不到,但一个天真的解决方案可能对旧版本的Android也有帮助(可能可以使用第三方应用程序获得自定义版本的单色模式)也许可以使用这样的东西,我在这里进行审查,

val Context.isDynamicGrayscale: Boolean
    get() {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) return false
        val hsv = FloatArray(3)
        return listOf(
            android.R.color.system_accent1_500,
            android.R.color.system_accent2_500,
            android.R.color.system_accent3_500,
        ).all {
            Color.colorToHSV(getColor(android.R.color.system_accent1_500), hsv)
            hsv[1] == .0f
        }
    }

相关问题