Xamarin Forms Android端Shell导航标签深浅色模式主题未生效问题
问题原因与修复方案
你的实现逻辑存在错误,不是Xamarin Forms SDK的缺陷,核心问题是ColorStateList的状态与颜色映射顺序颠倒。
错误点定位
你定义的状态数组和颜色数组的映射关系不匹配:
int[][] states = new int[][] { new int[] {-Android.Resource.Attribute.Checked }, // 第一个状态:未选中 new int[] { Android.Resource.Attribute.Checked } // 第二个状态:选中 }; // 颜色数组顺序和状态顺序一一对应,你这里写反了 int[] colors = new int[] { aSelectedColor, // 第一个颜色对应未选中状态,你错误放入了选中色 aDeselectedColor // 第二个颜色对应选中状态,你错误放入了未选中色 };
这种映射逻辑下,未选中的tab反而会显示选中色,就会出现所有标签文字都变成选中态颜色的问题。
修复代码
只需要把颜色数组的顺序调换即可:
int[] colors = new int[] { aDeselectedColor, // 未选中状态对应未选中色 aSelectedColor // 选中状态对应选中色 };
额外注意事项
- 主题切换完成后需要主动调用
ResetAppearance方法刷新底部导航状态,Xamarin Forms Shell默认不会在合并字典更新时自动触发Android端自定义渲染器的外观重置,你可以在SetAppTheme方法的OnPreferenceChanged逻辑中添加对底部导航外观刷新的调用。 - 确认你的深色/浅色主题资源字典中
ColorGray的取值和当前主题的PageBackgroundColor有足够的对比度,避免出现颜色接近导致的显示问题。
内容的提问来源于stack exchange,提问作者jwoeste
相关产品推荐
相关产品推荐

