如何获取Android设备样式颜色用于Compose TopAppBar?兼容哪些版本?
获取系统调色板颜色作为Compose TopAppBar背景色
实现方法
- 先通过Compose的
LocalContext拿到当前上下文,再读取系统主题里的对应颜色:- 若要精准匹配通知栏颜色,直接读取主题的
statusBarColor属性最可靠:val context = LocalContext.current // 定义要获取的属性数组 val attrs = intArrayOf(android.R.attr.statusBarColor) val typedArray = context.obtainStyledAttributes(attrs) // 取第一个属性值,用白色作为兜底默认值 val statusBarColor = Color(typedArray.getColor(0, Color.White.toArgb())) // 回收TypedArray避免内存泄漏 typedArray.recycle() - Android 12(API 31)及以上系统提供了专门的系统调色板资源(如
system_accent1_600系列),可直接通过ContextCompat.getColor获取:val systemAccentColor = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { Color(ContextCompat.getColor(context, android.R.color.system_accent1_600)) } else { // 低版本降级使用主题中的colorPrimary,保证风格匹配 Color(ContextCompat.getColor(context, R.color.colorPrimary)) }
- 若要精准匹配通知栏颜色,直接读取主题的
- 将获取到的颜色传入TopAppBar的
containerColor参数:TopAppBar( title = { Text("我的页面") }, colors = TopAppBarDefaults.topAppBarColors( containerColor = statusBarColor // 或使用上面的systemAccentColor ) )
版本兼容性说明
- 读取主题属性(
obtainStyledAttributes)和ContextCompat.getColor的方式支持所有Android版本(从API 1开始即可用)。 - 系统调色板专用资源(
android.R.color.system_accent*系列)仅在Android 12及以上可用,低版本需用主题中的colorPrimary或其他颜色属性兜底,确保不同版本下都能匹配系统通知栏的颜色风格。
内容的提问来源于stack exchange,提问作者fraterboots
相关产品推荐
相关产品推荐

