.NET MAUI GA版ActivityIndicator初始不可见时切换状态失效问题
MAUI GA版Android平台ActivityIndicator初始隐式状态切换失效问题
问题现象
- 原MAUI RC1版本可正常运行的项目升级至GA正式版后出现异常:
ActivityIndicator控件初始在iOS、Android平台均无法正常显示,经移除控件、重新部署、重新添加控件操作后,iOS平台问题修复,但Android平台问题持续 - 排查确认触发规则:必须在XAML中将
ActivityIndicator的IsVisible属性初始值设为True(控件初始可见),否则后台代码中切换IsVisible、IsRunning属性的逻辑完全不生效 - 版本差异:
- RC1版本中
IsVisible初始值设为False时功能完全正常 - GA版本中该写法仅Android平台失效,iOS平台仍可正常运行
- RC1版本中
复现代码
XAML代码
<Button x:Name="SpinOn" Text="Spin On" Clicked="SpinOnClicked" HorizontalOptions="Center" /> <Button x:Name="SpinOff" Text="Spin Off" Clicked="SpinOffClicked" HorizontalOptions="Center" /> <ActivityIndicator IsVisible="True" IsRunning="True" x:Name="TheSpinner" />
后台切换逻辑代码
private void SpinOnClicked(object sender, EventArgs e) { TheSpinner.IsRunning = true; TheSpinner.IsVisible = true; } private void SpinOffClicked(object sender, EventArgs e) { TheSpinner.IsRunning = false; TheSpinner.IsVisible = false; }
- 复现规则:若将XAML中
ActivityIndicator的IsVisible初始值改为"False",上述按钮切换逻辑完全失效;初始值设为"True"时功能正常。
问题解答
这是MAUI GA版本Android平台的已知渲染Bug,并非预期设计行为。根因是Android平台下若控件初始IsVisible=False,对应原生加载控件不会完成渲染实例化,后续跨层属性同步不会触发原生控件的状态更新。
如果要避免应用启动时控件默认显示、处于旋转加载状态,可直接用以下无感知方案规避,不影响后续业务逻辑:
- 保留XAML中
IsVisible="True"、IsRunning="True"的初始设置,重写页面的OnHandlerChanged生命周期方法,在原生控件完成挂载的第一时间把控件状态设为隐藏即可,用户不会感知到启动瞬间的加载状态:
protected override void OnHandlerChanged() { base.OnHandlerChanged(); TheSpinner.IsRunning = false; TheSpinner.IsVisible = false; }
- 注意不要在页面构造函数中执行上述状态修改,此时Android平台原生控件还未完成实例化,修改不会生效。
内容的提问来源于stack exchange,提问作者Steve Peschka
相关产品推荐
相关产品推荐

