Home > Mobile >  How to save background color on close
How to save background color on close

Time:04-18

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}" />
  • Related