.NET Android(Avalonia)应用状态栏颜色设置问题求助
解决Avalonia Android应用状态栏颜色不生效的问题
核心问题分析
你的代码存在两个关键问题导致状态栏颜色不生效:
base.OnCreate(savedInstanceState)调用时机错误,Avalonia的初始化逻辑会覆盖你提前设置的状态栏配置- 缺少状态栏文字颜色适配的逻辑,部分场景下颜色设置后因文字与背景对比度问题看起来无变化
修正后的代码实现
调整MainActivity的OnCreate方法,修改调用顺序并补充必要配置:
public class MainActivity : AvaloniaMainActivity<App> { protected override void OnCreate(Bundle savedInstanceState) { // 先执行Avalonia的基础初始化逻辑 base.OnCreate(savedInstanceState); // 配置状态栏布局模式,确保自定义颜色能正确渲染 Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(SystemUiFlags.LayoutStable | SystemUiFlags.LayoutFullscreen); // 设置状态栏为橙色 Window.SetStatusBarColor(Android.Graphics.Color.Orange); // 适配Android 6.0+的状态栏文字颜色(橙色为浅色背景,需设置深色文字) if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { var uiVisibility = Window.DecorView.SystemUiVisibility; uiVisibility |= (StatusBarVisibility)SystemUiFlags.LightStatusBar; Window.DecorView.SystemUiVisibility = uiVisibility; } } protected override AppBuilder CustomizeAppBuilder(AppBuilder builder) { return base.CustomizeAppBuilder(builder) .WithInterFont() .UseReactiveUI(); } }
额外需要检查的主题配置
打开Resources/values/styles.xml,确保主题配置没有强制锁定状态栏颜色:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <!-- 设置为透明或删除该属性,让代码控制的颜色生效 --> <item name="colorPrimaryDark">@android:color/transparent</item> <item name="colorAccent">@color/colorAccent</item> </style>
关键注意事项
- 必须先调用
base.OnCreate(savedInstanceState):Avalonia会在此方法中完成窗口基础初始化,后续设置的状态栏配置才能覆盖默认值 - API版本限制:
SetStatusBarColor仅在Android 5.0(API 21)及以上生效,需确保应用最低SDK版本设置为21或更高
内容的提问来源于stack exchange,提问作者Noble Eugene
相关产品推荐
相关产品推荐

