我正在开发一个Android应用程序,它可以获得颜色(作为32位数字(,我想使用AndroidDrawable
、来显示它
我还想确保没有透明度,所以我用一个设置了最高有效位的掩码OR
。
我的应用程序是用Kotlin编写的,所以这个数字是Int
类型的。
在Java中,我认为以下是
int colorInt = myColor || 0xFF000000;
我用Kotlin 尝试了以下内容
var colorInt:Int = myColor or 0xFF000000 // Error - Integer literal does not conform to the expected type of Int
这表示0xFF000000
超出了Int
的范围
我可以使用UInt
,但Drawable
类和许多其他SDK方法接受Int
作为颜色,如果我通过UInt
,则会抱怨类型。例如,如果我有两种颜色要在GradientDrawable
中使用,则构造函数接受IntArray
,而不会使用UIntArray
。(据我所知,无符号类型在Kotlin中是实验性的,所以我不想在更新Kotlin版本后再"修复"这些类型。(
我可以在Kotlin中使用-0xFFFFFF
,这似乎在这种情况下很好,尽管可以说我所做的不如java版本明显。
我想了解处理这种情况的最佳方式,以及java和kotlin中存在这种差异的原因。
由于Kotlin 1.3,您可以使用无符号整数((作为Int
的符号(因此十六进制0xFF000000
超出范围(。现在你可以试试:
// UInt instead of Int
// u suffix at the end of number
val m:UInt = 0xFF000000u