我对TextView.setTextColor(int)
完全正常的事实感到困惑
0xFFFFFFFF作为输入值
但是用十进制等效物是不行的
4294967295
现在,我完全理解为什么第二个值完全超出了int的范围。我的问题是为什么十六进制值不超出范围!
我问的原因是我有一种情况,我从文本文件中读取十六进制值,我需要在运行时使用它来设置应用程序中各种文本字段的颜色。
我正在尝试使用Java中的各种字符串到int方法(Long.parseLong
等),但是他们都没有做到这一点。
将字符串十六进制值转换为setTextColor会满意并正确解释的正确方法是什么?
答案 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