Xamarin.android 更改Xamarin.Forms中的开关颜色?
我想在android中更改switch的颜色,并创建自定义渲染器,就像从堆栈溢出的帖子一样: 下面是代码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)
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>