setTextColor的param是一个int但是8位十六进制值可以正常的故事是什么?

时间:2013-01-14 07:56:27

标签: java android hex

我对TextView.setTextColor(int)完全正常的事实感到困惑 0xFFFFFFFF作为输入值 但是用十进制等效物是不行的 4294967295

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

我问的原因是我有一种情况,我从文本文件中读取十六进制值,我需要在运行时使用它来设置应用程序中各种文本字段的颜色。

我正在尝试使用Java中的各种字符串到int方法(Long.parseLong等),但是他们都没有做到这一点。

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

2 个答案:

答案 0 :(得分:1)

对于不同形式的Integer Literals

,JLS中的规则不同

“如果int类型的十进制文字大于2147483648(231),或者十进制文字2147483648出现在除一元减号运算符(第15.15.4节)的操作数之外的任何地方,则为编译时错误。“

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

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

答案 1 :(得分:0)

也许Color课程会有所帮助:

  

颜色表示为压缩整数,由4个字节组成:alpha,red,   绿,蓝。这些值是前所未有的,意味着任何透明度   仅存储在alpha分量中,而不是颜色   组件。组件存储如下(α<24)| (红色   &LT;&LT; 16)| (绿色&lt;&lt; 8)|蓝色。每个组件的范围在0..255之间   0表示对该组件没有贡献,255表示   100%的贡献。因此,不透明黑色将是0xFF000000(100%不透明   但没有红色,绿色或蓝色的贡献)和不透明的白色   是0xFFFFFFFF