I'm doing an android game with Xamarin Forms and in this game you can choose if the theme is dark or light. What I did is creating staticressources (colors) in App.xmal.
<Application.Resources>
<Color x:Key="PrincipalColor" >#181818</Color>
<Color x:Key="PrincipalColorInvert" >#ffffff</Color>
</Application.Resources>
But when the user changes the theme (the staticressources color) and quit the game it doesn't save his preferences. I heard about "App.Current.Properties["Id"] = ..." but I can't figure it out. If someone know how to do i'll be happy to know. Thank you.
CodePudding user response:
You can use Xamarin.Essentials: Preferences
https://docs.microsoft.com/en-us/xamarin/essentials/preferences?tabs=android
Save a color in Resources
, in the example with a Button set a color Green or Red .
In MainPage.xaml at the top
BackgroundColor="{DynamicResource defaultBackgroundColor}"
Then the Buttons
<Button Clicked="Button_Clicked" Text="Green" />
<Button Clicked="Button_Clicked_1" Text="Red" />
In MainPage.xaml.cs using Xamarin.Essentials;
public MainPage()
{
InitializeComponent();
App.Current.Resources["defaultButtonBackgroundColor"] = Preferences.Get("defaultButtonBackgroundColor", "Blue");
}
private void Button_Clicked(object sender, EventArgs e)
{
Preferences.Set("BackgroundColor", "Green");
App.Current.Resources["defaultBackgroundColor"] = Preferences.Get("BackgroundColor", "Blue");
}
private void Button_Clicked_1(object sender, EventArgs e)
{
Preferences.Set("BackgroundColor", "Red");
App.Current.Resources["defaultBackgroundColor"] = Preferences.Get("BackgroundColor", "Blue");
}
Also use it for change TextColor of a Button etc , PricipalColor for example.
StaticResource
is set and DynamicResource
you can change
App.xaml.cs
<Application.Resources>
<Color x:Key="PrincipalColor" >#181818</Color>
</Application.Resources>
MainPage.xaml.cs
public MainPage()
{
InitializeComponent();
App.Current.Resources["defaultButtonBackgroundColor"] = Preferences.Get("defaultButtonBackgroundColor", "Blue");
App.Current.Resources["PrincipalColor"] = Preferences.Get("PrincipalColor", "#181818");
}
Change and PrincipalColor to White or any other color with Button.
private void Button_Clicked(object sender, EventArgs e)
{
Preferences.Set("PrincipalColor", "White");
App.Current.Resources["PrincipalColor"] = Preferences.Get("PrincipalColor", "#181818");
}
MainPage.xaml in the first Button is Static
and the 2e Dynamic
changes TextColor
<Button Clicked="Button_Clicked" Text="Green" TextColor="{StaticResource PrincipalColor}" />
<Button Clicked="Button_Clicked_1" Text="Red" TextColor="{DynamicResource PrincipalColor}" />