当Toggled和禁用的android开关都显示为灰色
如上所示,当iOS中的开关切换被禁用并且切换有颜色时,但在android中没有。 可以在android中做同样的效果吗?
如果您只想更改拇指颜色以匹配iOS UISwitch
轨道绿色( #41D150
),则可以更改Resources/values/style.xml
文件中的Xamarin.Android
(在Xamarin.Android
项目中):
加:
- #41D150
在API 19
– API 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/Samples/Samples/Samples/Views/EffectsSwitchChangeColorPage.xaml#L16
所以它在幕后的function是挂钩到实际的Android原生控件中,并使用你在XAML中提供的颜色更改它的颜色。 用于设置颜色的本机代码如下所示:
((SwitchCompat)Control).ThumbDrawable.SetColorFilter(...