You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:48