gpt4 book ai didi

Android getColor 不一致

转载 作者:太空宇宙 更新时间:2023-11-03 12:47:58 32 4
gpt4 key购买 nike

我需要向后端服务器发送一个颜色代码(转发给 iOS 客户端)但是 ContextCompact.getColor(context, colorResourceId); 返回一个其他客户端无法识别的负值(iOS ).

这是资源的十六进制值:

<color name="green">#1FAB06</color>

下面这段代码给出了以下负整数值:-14701818

int color = ContextCompat.getColor(context, mResourceColor);

这个负值转换成十六进制是:

1FAB06

如果我将这个十六进制值转换回十进制,我得到:2075398

public int getColorDecimal(Context context) {
int color = ContextCompat.getColor(context, mResourceColor);
String hexColor = String.format("%06X", (0xFFFFFF & color));
color = Integer.parseInt(hexColor, 16);

return color;
}

如果我将这个正小数应用于 View ,就会出现问题。 Android 不识别此值。编辑文本保持白色。

mETName.setTextColor(getColorDecimal(context));

由于数据同步,客户端和网络服务应该(以某种方式)具有相同的值。

最佳答案

根据 DOCS此方法不返回无符号十进制整数...而是十六进制值:

int getColor (Context context, int id)
Returns a single color value in the form 0xAARRGGBB.

收到的数字采用 Alpha/Red/Green/Blue 格式。

由于您的颜色是完全不透明的,getColor() 会自动返回 FF 作为您颜色的 alpha。所以,实际上,你的颜色是:FF1FAB06

它们都是一样的

所有数字都是同一个二进制数的表示。

FF1FAB06 是以下二进制数的十六进制表示:

  ALPHA      RED      GREEN      BLUE
--------- --------- --------- ---------
1111 1111 0001 1111 1010 1011 0000 0110
F F 1 F A B 0 1

-14701818 是以下二进制数的带符号十进制表示:

  ALPHA      RED      GREEN      BLUE
--------- --------- --------- ---------
1111 1111 0001 1111 1010 1011 0000 0110
F F 1 F A B 0 1

请注意,第 32 位最高有效位为 1。因此,在带符号的系统/变量中,该数字应读作负值。

这就是为什么您从 getColor()

得到负数的原因

2075398 但是,是以下二进制数:

  ALPHA      RED      GREEN      BLUE
--------- --------- --------- ---------
0000 0000 0001 1111 1010 1011 0000 0110
0 0 1 F A B 0 1

所以,第一个字节是 00000000。所以,Alpha 是 00,换句话说,2075398 是一个完全透明的颜色

安卓

对于 Android,setTextColor()getColor() 需要格式为 0xAARRGGBB 的十六进制值。因此,您必须在获取/设置颜色时请记住这一点...

他们也期待 Alpha 属性(不仅是红色/绿色/蓝色)。因此,对于完全不透明的颜色,您有 0xFF******

以 FF 开头的十六进制值实际上是带符号 int 表示的负十进制值...

其实一切都只是一个二进制数在内存中的表示

这样,在 Android 中,如果你想设置颜色,你必须保留负值,因为 -14701818 是 FF1FAB06 十六进制的十进制表示(当使用有符号整数时就是这种情况)。

如果出于某种原因您需要将十进制正值发送到服务器,请仅为您的服务器使用该正值并保持 Android 颜色分离。否则,每次要使用它们时,您都必须将其转换为适当的系统 (Android/iOS)。

iOS

我不确定 IOS 如何处理颜色。但可能,您必须将值转换为 IOS 可以处理的格式。

关于Android getColor 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38531143/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com