背景

在自定义view的学习中,想要设置颜色。如果直接在代码中输入"#a8d8ea",就看不到实际的颜色了。而使用资源文件能看到颜色。
把资源文件color中的内容还原为字符串形式
那么怎么从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);

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-29
  • 2022-02-04
  • 2021-11-29
  • 2021-12-04
猜你喜欢
  • 2022-12-23
  • 2021-09-20
  • 2022-12-23
  • 2021-12-30
  • 2022-12-23
  • 2021-09-15
相关资源
相似解决方案