Java 什么';这是setTextColor';s参数是一个整数,但是否可以使用8位十六进制值?

Java 什么';这是setTextColor';s参数是一个整数,但是否可以使用8位十六进制值?,java,android,hex,Java,Android,Hex,我真的被TextView.setTextColor(int)与 0xFFFFFF作为输入值 但是对于十进制的等价物是不合适的 4294967295 现在,我完全理解为什么第二个值完全超出int的范围。我的问题是为什么十六进制值没有超出范围 我问这个问题的原因是我遇到了这样一种情况:我正在从一个文本文件中读取十六进制值,我需要在运行时使用它来设置应用程序中各种文本字段的颜色 我在Java中尝试各种string-to-int方法时遇到了麻烦(Long.parseLong,等等),但没有一个能做到这一

我真的被
TextView.setTextColor(int)
与 0xFFFFFF作为输入值 但是对于十进制的等价物是不合适的 4294967295

现在,我完全理解为什么第二个值完全超出int的范围。我的问题是为什么十六进制值没有超出范围

我问这个问题的原因是我遇到了这样一种情况:我正在从一个文本文件中读取十六进制值,我需要在运行时使用它来设置应用程序中各种文本字段的颜色

我在Java中尝试各种string-to-int方法时遇到了麻烦(
Long.parseLong
,等等),但没有一个能做到这一点

将字符串十六进制值转换为setTextColor满意并能正确解释的值的正确方法是什么?

类可能会有所帮助:

颜色表示为压缩整数,由4个字节组成:alpha、red、, 绿色,蓝色。这些值是不相乘的,这意味着任何透明度 仅存储在alpha组件中,而不存储在颜色中 组件。组件存储如下(alpha类可能会有所帮助:

颜色表示为压缩整数,由4个字节组成:alpha、red、, 绿色、蓝色。值是不相乘的,表示任何透明度 仅存储在alpha组件中,而不存储在颜色中
组件。组件存储如下(alpha对于不同形式的组件,JLS中有不同的规则

如果int类型的十进制文字大于2147483648(231),或者十进制文字2147483648出现在一元减号运算符(§15.15.4)操作数以外的任何位置,则为编译时错误

如果十六进制、八进制或二进制int文本不适合32位,则为编译时错误


十六进制、八进制或二进制文字可以是负数的2的补码表示。

对于不同形式的数字,JLS中有不同的规则

如果int类型的十进制文字大于2147483648(231),或者十进制文字2147483648出现在一元减号运算符(§15.15.4)操作数以外的任何位置,则为编译时错误

如果十六进制、八进制或二进制int文本不适合32位,则为编译时错误


十六进制、八进制或二进制文字可以是负数的2的补码表示。

0xFFFFFFFF as integer是-1.0xFFFFFF as integer是-1。我了解颜色的工作原理以及它们的表示方式。我不了解的是该方法如何区分十六进制值和dec值,以及为什么它不乐意接受这两者(大小相等)。这是某种有符号/无符号的问题吗?我知道颜色是如何工作的,它们是如何表示的。我不明白的是,该方法如何区分十六进制值和十二进制值,以及为什么它不乐意接受(大小相等的)。这是某种有符号/无符号问题吗?谢谢……作为我自己问题的后续,我发现,传递到parseLong(或parseInt)中的值的字符串表示形式不能有前导
0x
。它应该是alphanum值以及parseInt中的基数(“FF333333”,16)。因此,您需要首先手动从字符串的前面去掉0x。谢谢…作为我自己问题的后续,我发现了传递到parseLong(或parseInt)中的值的字符串表示形式不能有前导的
0x
。它应该是alphanum值以及parseInt中的基数(“FF333333”,16)。因此您需要首先手动从字符串的前面去除0x。