我想知道以跨平台的方式操作应用程序设置的最佳解决方案是什么。
在iOS中,我们可以在应用程序之外的设置界面中更改设置,但在windows phone和android中却没有这样的功能。
所以,我的想法是在应用程序中创建一个正常的页面/屏幕,显示我所有的应用程序设置,并有Save()和Get()方法的接口,我可以使用DependencyServices实现特定的每个设备。
这样做对吗?
- Application子类有一个静态属性字典,可以用来存储数据。这可以从Xamarin中的任何地方访问。Application.Current.Properties.
Application.Current.Properties ["id"] = someClass.ID;
if (Application.Current.Properties.ContainsKey("id"))
{
var id = Application.Current.Properties ["id"] as int;
// do something with id
}
属性字典自动保存到设备。添加到字典中的数据将在应用程序从后台返回甚至重新启动后可用。Xamarin的。Forms 1.4在Application类上引入了一个额外的方法——SavePropertiesAsync()
——可以调用它来主动持久化Properties字典。这是为了让你在重要的更新后保存属性,而不是冒着由于崩溃或被操作系统杀死而无法序列化的风险。
Xamarin的。表单插件,使用本地设置管理。
- Android: SharedPreferences
- iOS: NSUserDefaults
- Windows Phone: isolatedstoragessettings
- Windows Store/Windows Phone RT: ApplicationDataContainer
https://github.com/jamesmontemagno/Xamarin.Plugins/tree/master/Settings
我尝试使用Application.Current.Properties字典,但出现了实现问题。
一个很简单的解决方案是James Montemagno的Xam.Plugin.Settings NuGet。安装NuGet会自动在Settings.cs中创建一个Helpers文件夹。要创建持久化设置,请执行以下操作:
private const string QuestionTableSizeKey = "QuestionTableSizeKey";
private static readonly long QuestionTableSizeDefault = 0;
和
public static long QuestionTableSize
{
get
{
return AppSettings.GetValueOrDefault<long>(QuestionTableSizeKey, QuestionTableSizeDefault);
}
set
{
AppSettings.AddOrUpdateValue<long>(QuestionTableSizeKey, value);
}
}
应用程序中的访问和设置如下:
namespace XXX
{
class XXX
{
public XXX()
{
long myLong = 495;
...
Helpers.Settings.QuestionTableSize = myLong;
...
long oldsz = Helpers.Settings.QuestionTableSize;
}
}
}