背景
在Java中,我可以使用它的标准六进制十进制值直接更改TextView的文本颜色:
textView.setTextColor(0xffffffff); //white
textView.setTextColor(0x00000000); //transparent
textView.setTextColor(0xff000000); //black
textView.setTextColor(0xff0000ff); //blue
//etc...
很容易...
问题
在Kotlin上,如果我尝试编写这样的东西,我会遇到一个奇怪的构建错误:
错误:(15,18)以下函数都不能使用提供的参数调用:public open fun setTextColor(p0:ColorStateList!):在android.widget.TextView中定义的单元public open fun setTextColor(p0:Int):单元在android.widget.TextView中定义
我尝试过的
我试图通过互联网搜索这个,我看不出六进制十进制值有什么特别之处 . 在Java上看似相同:
然后我决定用Java编写,然后转换为Kotlin . 结果在颜色值方面非常难以理解:
textView.setTextColor(-0x1) //white
textView.setTextColor(0x00000000) //transparent
textView.setTextColor(-0x1000000) //black
textView.setTextColor(-0xffff01) //blue
对我来说,似乎用于Kotlin的Integer的十六进制值是有符号的,而在Java上它会自动转换为有符号的值,因此这会导致值的翻转以及需要时设置减号的需要 .
我唯一能想到的,仍然可以读得很好,是这样的:
textView.setTextColor(Integer.parseUnsignedInt("ffff0000",16));
但是,这有许多缺点:
时间更长了 .
它转换一个字符串,因此效率低得多
最重要的是:它仅适用于API 26(Android O),目前在全球约1%的Android设备上有效 .
问题
它为什么会发生?
我究竟能做些什么来使其最具可读性,没有字符串转换,并适用于所有Android版本(在我的情况下为minSdkVersion 14)?
”,&spm=1001.2101.3001.5002&articleId=114727566&d=1&t=3&u=342ec27264de4d0ea22a1032a6bd63bc)
6115

被折叠的 条评论
为什么被折叠?



