XF5迁移AndroidX后如何正确设置windowDrawsSystemBarBackgrounds?
Xamarin.Forms 5 迁移AndroidX后AppCompat主题配置方案
错误根因
error APT2260: resource android:style/Theme.AppCompat.Light.DarkActionBar not found 报错是因为引用路径错误:Theme.AppCompat.Light.DarkActionBar 是AndroidX AppCompat扩展库提供的资源,不属于Android系统原生框架资源,因此不能加@android:style/前缀,直接引用父主题名称即可。
正确配置步骤
- 先确认Android项目已安装依赖包:
Xamarin.AndroidX.AppCompat- 项目引用的Xamarin.Forms版本为5.0正式版及以上
- 修正
Resources/values/styles.xml中的主题配置,同时补充解决导航栏遮挡的必要属性:
<style name="MyTheme.ActionBarAppCompat" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 系统原生属性需加android:前缀,关闭系统栏独立背景绘制 --> <item name="android:windowDrawsSystemBarBackgrounds">false</item> <!-- 核心配置:预留系统状态栏、导航栏空间,避免页面控件被遮挡 --> <item name="android:fitsSystemWindows">true</item> <!-- 若使用Xamarin.Forms Shell/自定义导航页,不需要原生ActionBar时可添加以下配置 --> <!-- <item name="windowNoTitle">true</item> --> <!-- <item name="windowActionBar">false</item> --> </style>
- 确认MainActivity配置正确:
- 必须继承自
FormsAppCompatActivity,旧版FormsApplicationActivity不兼容AndroidX AppCompat主题 - Activity特性中正确指定配置好的主题
示例代码:
- 必须继承自
[Activity( Label = "应用名称", Icon = "@mipmap/icon", Theme = "@style/MyTheme.ActionBarAppCompat", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )] public class MainActivity : FormsAppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); LoadApplication(new App()); } // 其余权限处理、生命周期代码按需保留 }
配置说明
- 只有Android SDK原生自带的属性、资源,引用时才需要加
android:命名空间前缀 - AppCompat库、其他第三方库提供的自定义属性/资源,引用时不需要加
android:前缀 - 移除
@android:style/前缀后出现控件遮挡,是因为缺少android:fitsSystemWindows="true"配置,该属性会通知系统自动为页面内容预留系统栏高度的边距,避免内容绘制到导航栏、状态栏下方。
内容的提问来源于stack exchange,提问作者TheXenocide
相关产品推荐
相关产品推荐

