当Toggled和禁用的android开关都显示为灰色

切换iOS

切换Android

如上所示,当iOS中的开关切换被禁用并且切换有颜色时,但在android中没有。 可以在android中做同样的效果吗?

如果您只想更改拇指颜色以匹配iOS UISwitch轨道绿色( #41D150 ),则可以更改Resources/values/style.xml文件中的Xamarin.Android (在Xamarin.Android项目中):

加:

 #41D150 

API 19API 26上运行的表单:

在此处输入图像描述

当开关被禁用并切换时,我想要更少的不透明度

如果要更改track颜色,可以使用一个非常简单的渲染器来更改Android上的所有表单Switch

 [assembly: ExportRenderer(typeof(Switch), typeof(StyleBasedSwitchRenderer))] namespace Forms_PCL_XAML.Droid { public class StyleBasedSwitchRenderer : SwitchRenderer { protected override void OnElementChanged(Xamarin.Forms.Platform.Android.ElementChangedEventArgs e) { base.OnElementChanged(e); Control?.SetTrackResource(Resource.Drawable.form_switch_track_mtrl_alpha); } } } 

Resource.Drawable.form_switch_track_mtrl_alpha是一个9Patch图像。 普通主题使用AppCompat库中的abc_switch_track_mtrl_alpha.9.png

因此,如果您添加类似的9Patch但更改颜色:

在此处输入图像描述

你最终得到:

在此处输入图像描述

或者使用基于绘图的选择器和两个9Patch图像来保持拇指的相同默认颜色:

渲染器变为:

 Control?.SetTrackResource(Resource.Drawable.form_switch_selector); 

Resource.Drawable文件夹中的Selector( form_switch_selector.xml ):

      

两个9Patch文件:

在此处输入图像描述 在此处输入图像描述

结果是:

在此处输入图像描述

如果要在Xamarin表单中更改Switch控件的默认颜色,可以使用我们在Forms社区工具箱中创建的Effect

如果你愿意,也可以使用实际的代码,它可以在这里找到

https://github.com/FormsCommunityToolkit/FormsCommunityToolkit/blob/dev/src/Effects/Effects.Android/Effects/Switch/SwitchChangeColor.cs

但最好是在我们的示例应用程序中使用它来https://github.com/FormsCommunityToolkit/FormsCommunityToolkit/blob/dev/Samples/Samples/Samples/Views/EffectsSwitchChangeColorPage.xaml#L16

所以它在幕后的function是挂钩到实际的Android原生控件中,并使用你在XAML中提供的颜色更改它的颜色。 用于设置颜色的本机代码如下所示:

 ((SwitchCompat)Control).ThumbDrawable.SetColorFilter(...