Xamarin Forms Android:AppCompatActivity的Toolbar背景与标题色无法修改
我之前在Xamarin Forms Android项目里也踩过Toolbar颜色设置的坑,试了好几种方法才搞定,给你分享两个靠谱的解决方案,应该能解决你的问题:
方案1:通过主题样式配置(推荐,适合静态设置)
这个方法最稳定,通过修改Android项目的主题样式统一配置Toolbar颜色,不需要额外写代码。
- 打开(或新建)Android项目下的
Resources/values/styles.xml文件,修改你已经在Activity里指定的MyTheme样式:
<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- 设置Toolbar的背景色 --> <item name="colorPrimary">@color/toolbar_bg</item> <!-- 设置Toolbar标题的颜色(兼容Android 5.0+) --> <item name="android:titleTextColor">@color/toolbar_title</item> <!-- 兼容旧版本Android的标题颜色设置 --> <item name="titleTextColor">@color/toolbar_title</item> </style>
- 在
Resources/values/colors.xml里定义对应的颜色值(没有这个文件就新建):
<resources> <color name="toolbar_bg">#2196F3</color> <!-- 替换成你想要的背景色 --> <color name="toolbar_title">#FFFFFF</color> <!-- 替换成你想要的标题色 --> </resources>
因为你的MainActivity已经指定了Theme = "@style/MyTheme",重新运行项目后,Toolbar的颜色就会自动生效。如果项目用的是NavigationPage,这个配置也会自动应用到默认的导航栏Toolbar上。
方案2:代码动态修改(适合运行时调整颜色)
如果需要在程序运行过程中动态改变Toolbar颜色,可以在MainActivity的OnCreate方法里直接操作Toolbar实例:
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); global::Xamarin.Forms.Forms.Init(this, savedInstanceState); // 找到默认的Toolbar控件 var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar); if (toolbar != null) { // 设置背景色,可使用Color类预设颜色或解析十六进制颜色 toolbar.SetBackgroundColor(Android.Graphics.Color.ParseColor("#2196F3")); // 设置标题文本颜色 toolbar.SetTitleTextColor(Android.Graphics.Color.ParseColor("#FFFFFF")); // 如果需要设置副标题颜色,可添加以下代码 // toolbar.SetSubtitleTextColor(Android.Graphics.Color.ParseColor("#CCCCCC")); } LoadApplication(new App()); }
几个需要注意的坑:
- 不要同时混用主题配置和代码设置,两者容易冲突,选一种方式即可。
- 如果你的Xamarin Forms项目里用
NavigationPage设置了BarBackgroundColor或BarTextColor,会优先覆盖Android端的设置,需要把这些XAML里的设置去掉。 - 确保使用的是
Android.Support.V7.Widget.Toolbar而不是旧的Android.Widget.Toolbar,否则可能找不到控件或设置不生效。
内容的提问来源于stack exchange,提问作者Jamal
相关产品推荐
相关产品推荐

