Xamarin.android 更改Xamarin.Forms中的开关颜色?

Xamarin.android 更改Xamarin.Forms中的开关颜色?,xamarin.android,toggle,xamarin.forms,Xamarin.android,Toggle,Xamarin.forms,我想在android中更改switch的颜色,并创建自定义渲染器,就像从堆栈溢出的帖子一样: 下面是代码 public class CustomSwitchRenderer : SwitchRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Switch> e) { base.OnElementChanged(e); if (Control != null)

我想在android中更改switch的颜色,并创建自定义渲染器,就像从堆栈溢出的帖子一样: 下面是代码

public class CustomSwitchRenderer : SwitchRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Switch> e)
{
    base.OnElementChanged(e);

    if (Control != null)
    {
        Control.TextOn = "Yes";
        Control.TextOff = "No";

        Android.Graphics.Color colorOn = Android.Graphics.Color.Rgb(239, 201, 6);
        Android.Graphics.Color colorOff = Android.Graphics.Color.LightGray;
        Android.Graphics.Color colorDisabled = Android.Graphics.Color.Gray;
        Android.Graphics.Color textColor = Android.Graphics.Color.Black;

        Control.SetTextColor (ColorStateList.ValueOf  (textColor));
        Control.SetTextColor (textColor);

        StateListDrawable drawable = new StateListDrawable();
        drawable.AddState(new int[] { Android.Resource.Attribute.StateChecked }, new ColorDrawable(colorOn));
        drawable.AddState(new int[] { -Android.Resource.Attribute.StateEnabled }, new ColorDrawable(colorDisabled));
        drawable.AddState(new int[] { }, new ColorDrawable(colorOff));

        Control.ThumbDrawable = drawable;

    }
}
公共类CustomSwitchRenderer:SwitchRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(控件!=null)
{
Control.TextOn=“是”;
Control.TextOff=“否”;
Android.Graphics.colorOn=Android.Graphics.Color.Rgb(239201,6);
Android.Graphics.colorOff=Android.Graphics.Color.LightGray;
Android.Graphics.colorDisabled=Android.Graphics.Color.Gray;
Android.Graphics.Color textColor=Android.Graphics.Color.Black;
Control.SetTextColor(ColorStateList.ValueOf(textColor));
Control.SetTextColor(textColor);
StateListDrawable drawable=新StateListDrawable();
AddState(新的int[]{Android.Resource.Attribute.StateChecked},新的ColorDrawable(colorOn));
AddState(新的int[]{-Android.Resource.Attribute.statenabled},新的ColorDrawable(colorDisabled));
AddState(新的int[]{},新的ColorDrawable(colorOff));
Control.ThumbDrawable=可绘制;
}
}
}
这个代码对我不起作用?是否还需要在drawable文件夹中添加一些项目?

您可以在UI项目中创建自己的控件:

公共类MySwitch:开关
{
}
之后,将使用
的表单切换为
MySwitch
控件

然后,您需要告诉
Xamarin.Forms
基础设施您正在为
MySwitch
控件提供渲染器

*.Droid
项目中,在程序集级别(命名空间声明上方或
AssemblyInfo.cs
文件中)添加以下属性

[程序集:导出渲染器(typeof(MySwitch)、typeof(CustomSwitchRenderer))]

对于Forms 2.1,现在可以在仅进行微小视觉更改的情况下,不再需要自定义渲染器。有关使用它们的入门指南,请参阅链接指南。

对于Android,您可以更改“styles.xml”文件中的属性“colorAccent”

008000

我已经添加了程序集,但它仍然不工作。我还需要在drawable文件夹中添加任何内容吗???@Dhruv我已经更新了示例,定义了您自己的控件,然后为它定义了渲染器。@Dhruv,当运行项目执行流时,进入
CustomSwitchRenderer
类中的
OnElementChanged
方法(我的意思是,您能调试这个方法吗)?是的!!!在调试时,控件在这里运行,但UI中没有任何更改。我不知道为什么会发生这种情况?您是否尝试更改
TextOn
TextOff
属性的值?查看对它们的更改是否反映在UI上。
<item name="colorAccent">#008000</item>