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

.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平台仍可正常运行

复现代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:15:34