Delphi Alexandria 11.0(Android)修改状态栏颜色触发Range check error
解决Delphi 11 Android应用修改状态栏颜色触发“Range check error”问题
问题原因
Delphi 11默认开启范围检查编译选项,你使用的$FF2ED573这类十六进制颜色值属于无符号整数范围,直接传递给接受有符号Integer类型的Android API方法时,会触发范围检查错误。从10.2升级到11的旧项目,可能在编译选项中关闭了范围检查,或是旧版本JNI绑定对数值处理更宽松,因此未出现问题。
解决方案
方案1:临时关闭范围检查
在颜色设置代码块前后添加范围检查开关,避免数值转换触发错误:
uses Androidapi.Helpers; ... {$R-} // 临时关闭范围检查 TAndroidHelper.Activity.getWindow.setStatusBarColor(Integer($FF2ED573)); TAndroidHelper.Activity.getWindow.setNavigationBarColor(Integer($FF34495E)); {$R+} // 恢复范围检查
方案2:使用Android官方颜色解析API
通过TJColor类解析颜色字符串,绕过数值类型转换问题:
uses Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText; ... TAndroidHelper.Activity.getWindow.setStatusBarColor( TJColor.JavaClass.parseColor(StringToJString('#FF2ED573')) ); TAndroidHelper.Activity.getWindow.setNavigationBarColor( TJColor.JavaClass.parseColor(StringToJString('#FF34495E')) );
方案3:使用Delphi颜色转换函数
通过ColorToARGB函数将TAlphaColor转换为符合要求的有符号整数:
uses Androidapi.Helpers, Vcl.Graphics; ... TAndroidHelper.Activity.getWindow.setStatusBarColor( ColorToARGB(TAlphaColor($FF2ED573)) ); TAndroidHelper.Activity.getWindow.setNavigationBarColor( ColorToARGB(TAlphaColor($FF34495E)) );
内容的提问来源于stack exchange,提问作者Tallys Ferrante
相关产品推荐
相关产品推荐

