为什么导航栏在 Xamarin.Forms 中在某些设备上不改变颜色?
Why doesn't navigationbar change colour in Xamarin.Forms on some devices?
我正在构建一个 Xamarin Forms 应用程序,目前在 Android。
我正在尝试动态更改应用程序顶部导航栏的颜色。我使用锁定到 Android 4.1 API 17 的旧 phone 成功地做到了这一点,但我已经尝试过所有其他 phone,因为它不起作用。我试过:
三星 SM-G388F - Android 5.1 API 22
Google 像素 - Android 7.1 API 25
Screenshot - Newer phones - does not work - simply inherits page background colour
Screenshot - Older phone - works perfectly
最初我使用 App.xaml 中定义的 DynamicResource 来根据您使用的环境更改 BarBackgroundColour - Live/Test。其他两个属性 BackgroundColor 和 BarTextColor 工作正常。
<Color x:Key="navBarColour">#F4721C</Color>
<Style TargetType="NavigationPage">
<Setter Property="BackgroundColor" Value="{StaticResource pageBackground}"/>
<Setter Property="BarBackgroundColor" x:Key="navBar" Value="{DynamicResource navBarColour}"/>
<Setter Property="BarTextColor" Value="{StaticResource textColor}"/>
</Style>
在 App.xaml.cs 中设置应用加载
if (Settings.Environment.ToLower() == "live")
{
Application.Current.Resources["navBarColour"] = Application.Current.Resources["anglianLightBlue"];
}
else
{
Application.Current.Resources["navBarColour"] = Application.Current.Resources["red"];
}
用户还可以在此处的“设置”页面上切换环境:
App.Current.Resources["navBarColour"] = App.Current.Resources["red"];
我试过将其更改为 StaticResource,并尝试在我的 xaml 中直接将其设置为 Color.Black,但它仍然不起作用 - 我似乎找不到一种在任何地方改变它的方法。
我在 Google 上找不到任何关于此的信息,也找不到任何有类似问题的人。
有没有其他人经历过这个,如果有,他们是如何解决这个问题的?
我没有找到为什么这不起作用,但我确实找到了解决方法。 NavigationBar 正在继承页面背景颜色,因此通过将页面背景更改为您希望栏的颜色,然后在其余内容周围粘贴一个容器 (ScrollView/ContentView) 并为容器的背景着色页面背景颜色这给出了预期的效果。
我仍然想知道为什么这不起作用,但现在这是一个合适的解决方法。
我正在构建一个 Xamarin Forms 应用程序,目前在 Android。
我正在尝试动态更改应用程序顶部导航栏的颜色。我使用锁定到 Android 4.1 API 17 的旧 phone 成功地做到了这一点,但我已经尝试过所有其他 phone,因为它不起作用。我试过:
三星 SM-G388F - Android 5.1 API 22
Google 像素 - Android 7.1 API 25
Screenshot - Newer phones - does not work - simply inherits page background colour
Screenshot - Older phone - works perfectly
最初我使用 App.xaml 中定义的 DynamicResource 来根据您使用的环境更改 BarBackgroundColour - Live/Test。其他两个属性 BackgroundColor 和 BarTextColor 工作正常。
<Color x:Key="navBarColour">#F4721C</Color>
<Style TargetType="NavigationPage">
<Setter Property="BackgroundColor" Value="{StaticResource pageBackground}"/>
<Setter Property="BarBackgroundColor" x:Key="navBar" Value="{DynamicResource navBarColour}"/>
<Setter Property="BarTextColor" Value="{StaticResource textColor}"/>
</Style>
在 App.xaml.cs 中设置应用加载
if (Settings.Environment.ToLower() == "live")
{
Application.Current.Resources["navBarColour"] = Application.Current.Resources["anglianLightBlue"];
}
else
{
Application.Current.Resources["navBarColour"] = Application.Current.Resources["red"];
}
用户还可以在此处的“设置”页面上切换环境:
App.Current.Resources["navBarColour"] = App.Current.Resources["red"];
我试过将其更改为 StaticResource,并尝试在我的 xaml 中直接将其设置为 Color.Black,但它仍然不起作用 - 我似乎找不到一种在任何地方改变它的方法。
我在 Google 上找不到任何关于此的信息,也找不到任何有类似问题的人。 有没有其他人经历过这个,如果有,他们是如何解决这个问题的?
我没有找到为什么这不起作用,但我确实找到了解决方法。 NavigationBar 正在继承页面背景颜色,因此通过将页面背景更改为您希望栏的颜色,然后在其余内容周围粘贴一个容器 (ScrollView/ContentView) 并为容器的背景着色页面背景颜色这给出了预期的效果。 我仍然想知道为什么这不起作用,但现在这是一个合适的解决方法。