今天我更新到Xamarin.Forms 2.5.0并看到,我收到以下警告:
警告CS0618' Forms.Context'已废弃:'从版本2.5开始,Context已过时。请改用本地语境。'
如何获取本地上下文而不是Forms.Context
? Is the Android Context meant?
警告CS0618' ButtonRenderer.ButtonRenderer()'已过时:'从2.5版开始,此构造函数已过时。请改用ButtonRenderer(上下文)。'
在我的ButtonRenderer
我只有OnElementChanged()
方法,所以我应该在这里更改什么?只需添加ButtonRenderer(Context)
构造函数?如果我在我的平台渲染器类中执行此操作,我仍然会收到警告。有人有例子吗? official documentation没有提及它,除了open source code of ButtonRenderer
之外,Google也没有带来一些有用的结果。此更改还涉及许多其他渲染器类。
有没有人经历过其他变化,制动插件等等?
PS:当Device.Windows
被弃用时,我也没有发现。现在我用Device.UWP
替换它。
答案 0 :(得分:21)
我对SearchBarRenderer
有同样的问题,而我需要做的就是修复它,就像这样添加一个构造函数:
public ShowSearchBarRenderer(Context context) : base(context)
{
}
希望回答你问题的第二部分。
答案 1 :(得分:11)
这里有两个问题:
Xamarin.Forms.Forms.Context
已过时,我如何访问当前上下文?将重载的构造函数添加到每个自定义渲染器
以下是使用ButtonRenderer
[assembly: ExportRenderer(typeof(CustomButton), typeof(CustomButtonRenderer))]
namespace MyApp.Droid
{
public class CustomButtonRenderer : ButtonRenderer
{
public CustomButtonRenderer(Context context) : base(context)
{
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
//ToDo: Customize Button
}
}
}
安装@Motz的CurrentActivityPlugin。
现在,您可以在需要访问当前活动时致电CrossCurrentActivity.Current.Activity
。
以下是如何在Xamarin.Forms中打开应用程序设置的示例。
[assembly: Dependency(typeof(DeepLinks_Android))]
namespace MyApp.Droid
{
public class DeepLinks_Android : IDeepLinks
{
Context CurrentContext => CrossCurrentActivity.Current.Activity;
public Task OpenSettings()
{
var myAppSettingsIntent = new Intent(Settings.ActionApplicationDetailsSettings, Android.Net.Uri.Parse("package:" + CurrentContext.PackageName));
myAppSettingsIntent.AddCategory(Intent.CategoryDefault);
return Task.Run(() =>
{
try
{
CurrentContext.StartActivity(myAppSettingsIntent);
}
catch (Exception)
{
Toast.MakeText(CurrentContext.ApplicationContext, "Unable to open Settings", ToastLength.Short);
}
});
}
}
}
答案 2 :(得分:10)
使用Android.App.Application.Context