如何在Android中将颜色整数转换为十六进制字符串?

Bos*_*ude 183 java string android hex colors

我有一个从一个生成的整数 android.graphics.Color

整数的值为-16776961

如何将此值转换为格式为#RRGGBB的十六进制字符串

简单地说:我想从-16776961输出#0000FF

注意:我不希望输出包含alpha,我也尝试过这个例子而没有任何成功

Jos*_*osh 443

掩码确保你只获得RRGGBB,%06X为你提供零填充十六进制(总是6个字符长):

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚意识到有一种Color.parseColor(String hex)方法,它完全符合我的要求. (7认同)
  • 这很完美,谢谢!比在Integer.toHexString()上尝试使用子字符串更容易,更准确. (3认同)
  • int colorInt = 0xff000000 | Integer.parseInt(hexString,16); (3认同)
  • 如果您的颜色使用alpha,请不要使用此答案.你会失去它. (3认同)
  • @Simon,要使其准备好使用alpha,只需删除蒙版并将6更改为8。请注意,OP要求取消alpha。 (3认同)

min*_*des 51

尝试Integer.toHexString()

来源: 在Java中,如何在保持前导零的同时将字节数组转换为十六进制数字字符串?

  • 这个答案保留了颜色的alpha (7认同)
  • 好吧,如果你想摆脱alpha,只需为它创建一个位掩码:Integer.toHexString(value&0x00FFFFFF) (3认同)
  • Java int类型长度为4个字节.根据android.graphics.Color的文档,leftest字节是alpha通道.通过使用值为0x00FFFFFF的逐位AND运算,您基本上将leftest字节(alpha通道)清除为0.当与Integer.toHexString一起使用时,它只会将剩余的3个字节留在String中.所有非有效数字都将从通话中删除,因此如果您想要前导零,则可能必须在自己前置. (3认同)

Bos*_*ude 22

我相信我已找到答案,此代码将整数转换为十六进制字符串并删除alpha.

Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);
Run Code Online (Sandbox Code Playgroud)

注意,如果您确定删除alpha不会影响任何内容,仅使用此代码.


blu*_*are 18

您可以将其用于没有 alpha 的颜色:

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));
Run Code Online (Sandbox Code Playgroud)

或者用阿尔法:

String hexColor = String.format("#%08X", (0xFFFFFFFF & intColor));
Run Code Online (Sandbox Code Playgroud)


Dil*_*eet 9

这就是我做的

 int color=//your color
 Integer.toHexString(color).toUpperCase();//upercase with alpha
 Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha
Run Code Online (Sandbox Code Playgroud)

谢谢你们的回答做了这件事

  • @Saket最佳答案的变体应为:String.format(“#%08X”,intColor) (2认同)

小智 5

ARGB颜色到十六进制字符串的整数值:

String hex = Integer.toHexString(color); // example for green color FF00FF00
Run Code Online (Sandbox Code Playgroud)

十六进制字符串到ARGB颜色的整数值:

int color = (Integer.parseInt( hex.substring( 0,2 ), 16) << 24) + Integer.parseInt( hex.substring( 2 ), 16);
Run Code Online (Sandbox Code Playgroud)