【问题标题】:SwitchRender.SwitchRender()' is obsolete with Xamarin.Forms rendererSwitchRender.SwitchRender()' 已与 Xamarin.Forms 渲染器一起过时
【发布时间】:2018-02-01 22:57:07
【问题描述】:

我正在 Android 中实现 SwitchRenderer 的代码,但是当我收到警告时,代码似乎存在问题:

'SwitchRender.SwitchRender()' 已过时; '这个构造函数是 自 2.5 版起已过时。请改用 SwitchRender(Context)。'

有没有人知道如何解决这个问题:

using Japanese.Android;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Japanese;

[assembly: ExportRenderer(typeof(ExtSwitch), typeof(ExtSwitchRenderer))]
namespace Japanese.Android
{
    public class ExtSwitchRenderer : SwitchRenderer
    {
        private ExtSwitch view;

        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Switch> e)
        {
            base.OnElementChanged(e);
            if (e.OldElement != null || e.NewElement == null)
                return;
            view = (ExtSwitch)Element;
            if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBean)
            {
                if (this.Control != null)
                {
                    if (this.Control.Checked)
                    {
                        this.Control.TrackDrawable.SetColorFilter(view.SwitchOnColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
                    }
                    else
                    {
                        this.Control.TrackDrawable.SetColorFilter(view.SwitchOffColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
                    }
                    this.Control.CheckedChange += this.OnCheckedChange;
                    UpdateSwitchThumbImage(view);
                }
                //Control.TrackDrawable.SetColorFilter(view.SwitchBGColor.ToAndroid(), PorterDuff.Mode.Multiply);  
            }
        }

        private void UpdateSwitchThumbImage(CustomSwitch view)
        {
            if (!string.IsNullOrEmpty(view.SwitchThumbImage))
            {
                view.SwitchThumbImage = view.SwitchThumbImage.Replace(".jpg", "").Replace(".png", "");
                int imgid = (int)typeof(Resource.Drawable).GetField(view.SwitchThumbImage).GetValue(null);
                Control.SetThumbResource(Resource.Drawable.icon);
            }
            else
            {
                Control.ThumbDrawable.SetColorFilter(view.SwitchThumbColor.ToAndroid(), PorterDuff.Mode.Multiply);
                // Control.SetTrackResource(Resource.Drawable.track);  
            }
        }

        private void OnCheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
        {
            if (this.Control.Checked)
            {
                this.Control.TrackDrawable.SetColorFilter(view.SwitchOnColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
            }
            else
            {
                this.Control.TrackDrawable.SetColorFilter(view.SwitchOffColor.ToAndroid(), PorterDuff.Mode.SrcAtop);
            }
        }
        protected override void Dispose(bool disposing)
        {
            this.Control.CheckedChange -= this.OnCheckedChange;
            base.Dispose(disposing);
        }
    }
}

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    查看答案here。做 Android 自定义渲染器的新方法是这样的:

    public class ExtSwitchRenderer : SwitchRenderer
    {
        private ExtSwitch view;
    
        public ExtSwitchRenderer(Context context) : base(context) { }
    
        ....
    }
    

    然后,如果您确实需要在自定义渲染器中使用 Android 上下文,则可以使用通过构造函数传入的上下文,而不是 Forms.Context

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2017-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多