Material3:升级Android Studio Giraffe后如何获取主题十六进制颜色值?
在Android Studio Giraffe中访问主题颜色并获取十六进制值
Android Studio Giraffe默认采用Material 3主题,颜色系统改为通过主题属性引用而非直接硬编码颜色值,这就是你看不到teal、purple这类直接颜色值的原因。状态栏的紫色通常对应主题的colorPrimary属性,以下是具体解决方法:
一、访问主题中的颜色
1. 在XML布局/样式中引用
直接使用主题属性即可获取对应颜色,常用属性示例:
- 状态栏颜色(默认配置):
?attr/colorPrimary - 主品牌色调:
?attr/colorPrimary - 次要品牌色调:
?attr/colorSecondary - 页面背景色:
?attr/colorBackground
示例(设置TextView文本颜色):
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="?attr/colorPrimary" />
2. 在代码中获取
通过Context的主题解析方法获取颜色值:
// 解析colorPrimary对应的颜色值 TypedValue typedValue = new TypedValue(); getTheme().resolveAttribute(com.google.android.material.R.attr.colorPrimary, typedValue, true); int primaryColor = typedValue.data; // 或用ContextCompat简化调用 int primaryColorCompat = ContextCompat.getColor(this, com.google.android.material.R.attr.colorPrimary);
Kotlin版本:
val primaryColor = context.theme.resolveAttribute(com.google.android.material.R.attr.colorPrimary, TypedValue(), true).run { data } // 或简化写法 val primaryColorCompat = ContextCompat.getColor(context, com.google.android.material.R.attr.colorPrimary)
二、获取颜色的精确十六进制值
1. 查看默认颜色资源
打开res/values/colors.xml,主题属性对应的默认颜色都在这里定义,比如状态栏紫色的默认值:
<color name="purple_500">#6750A4</color>
注意:如果开启了Material You动态颜色适配,运行时实际颜色可能和默认值不同,需用以下方法获取真实值。
2. 通过布局预览直接查看
- 打开布局文件切换到Design视图
- 选中状态栏或使用目标颜色的控件
- 在右侧属性面板点击颜色属性旁的色块,打开颜色选择器
- 选择器底部会显示当前颜色的十六进制值
3. 代码中输出十六进制值
在Activity/Fragment中获取颜色后,转换为十六进制字符串并打印:
int color = ContextCompat.getColor(this, com.google.android.material.R.attr.colorPrimary); String hexColor = String.format("#%06X", (0xFFFFFF & color)); Log.d("ColorHex", hexColor);
Kotlin版本:
val color = ContextCompat.getColor(context, com.google.android.material.R.attr.colorPrimary) val hexColor = String.format("#%06X", 0xFFFFFF and color) Log.d("ColorHex", hexColor)
内容的提问来源于stack exchange,提问作者WHOATEMYNOODLES
相关产品推荐
相关产品推荐

