把资源文件color中的内容还原为字符串形式

在Android自定义View中,从color资源文件获取颜色并以字符串形式展示。通过String.format()解决从十进制到十六进制的转换问题,但遇到数值转换异常。经过实践和查阅资料,找到解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

在自定义view的学习中,想要设置颜色。如果直接在代码中输入"#a8d8ea",就看不到实际的颜色了。而使用资源文件能看到颜色。
在这里插入图片描述
那么怎么从color资源文件中获取String呢

        canvas.drawColor(Color.parseColor(getColorString(R.color.color8328_1)));

刚开始使用的是直线思维的:

    private String getColorString(int Rid) {
            return String.valueOf(this.getContext().getColor(Rid));
    }

实际效果是:
log:

color8328_1(#a8d8ea)   ->  -5711638

在网上查找的答案:

String strColor = String.format("#%06X", 0xFFFFFF & intColor);

String.format()用法

我们直接使用String.ValueOf(12635) 是ok的。
但是color它不是十进制数。所以就报错了

而String类的format()方法用于创建格式化的字符串,所以我们使用它来完成转换
学习链接:https://www.jianshu.com/p/db53c3453749

这里的使用情况

1、
所以"#%06X"的解读
“#” 在转换前加#号
“%” 用后面的规则组合、转换
“06” 6位数,不够就补0
“X” 整数类型(十六进制)

2、
format是可以处理各种各样类型的,字符串类型、字符类型、布尔类型、整数类型 等等

3、
0xFFFFFF & intColor

实践反馈

大失败。。。why???
log:

color8328_1(#a8d8ea)   ->   #040026

我怀疑是:所谓格式化为16进制的数,是从10进制的数变化而来的
证明失败:正确输出0xa2

        Log.d(TAG, "onCreate: " + getColorString(0xa2));

又感觉像是十进制数不对一样:
a8d8ea -> 11065578 这是转换的结果,但是转换

        Log.d(TAG, "www " + R.color.color8328_1);

结果是2130968614
2130968614 -> 7f040026
这就是结果了。。。可是为什么

    <color name="color8328_1">#a8d8ea</color>

为什么会是这个数据呢???

最终解决方案:

https://stackoverflow.com/questions/5026995/android-get-color-as-string-value

colorStr=getResources().getString(R.color.someColor);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值