开关颜色不是 respected/damped - 关闭对 trackTint 颜色的影响 (OnColor)

Switch color is not respected/damped - turn off effect on trackTint color (OnColor)

通常你会像这样使用OnColor

<Switch x:Name="optionSwitch" HorizontalOptions="StartAndExpand" OnColor="Blue" ThumbColor="Cyan" />

自定义轨道颜色,结果如下:

IsToggled = true;

IsToggled = false;

但在我的应用程序中,OnColor 总是被覆盖,我不知道造成这种情况的原因(Theme.Material.Light.DarkActionBar 中的某些内容?)。

这是使用相同代码在我的应用程序中的外观:

IsToggled = true;

IsToggled = false;

所以轨道颜色不是我设置的颜色。似乎有一种“效果”,可以修饰颜色。我想我可以使用自定义渲染器并更改 TrackTintMode:

的值
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Switch> e)
{
    base.OnElementChanged(e);

    if (Control != null)
    {
        Control.TrackTintMode = Android.Graphics.PorterDuff.Mode.SrcOver;
    }
}

但是,关闭颜色也被设置,并且在重新启用时它会恢复到默认值。我尝试了很多其他的东西,但是 post 会变得很长...

如何关闭此“功能”?

编辑:

经过多次尝试,我认为我可以重现该问题。 MainActivity.cs 必须如下所示:

[Activity(Label = "TestSwitch", Icon = "@mipmap/icon", Theme = "@style/AppTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation | ConfigChanges.UiMode | ConfigChanges.ScreenLayout | ConfigChanges.SmallestScreenSize )]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
{
    // ...
}

以及 styles.xml 中的相应主题:

<?xml version="1.0" encoding="utf-8" ?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">

    </style>
</resources>

其余以默认XF模板为准

我能够重现这个问题。

最初,默认的 Xamarin.Forms Android 项目使用了 Android 5.0 之前常见的旧式控件渲染。使用模板构建的应用程序将 FormsApplicationActivity 作为其主要 activity.

的基础 class

Xamarin.Forms Android 项目现在使用 FormsAppCompatActivity 作为其主要 activity. 的基础 class

变化:

global::Xamarin.Forms.Platform.Android.FormsApplicationActivity

收件人:

global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity

并使用如下所示的 style.xml。

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

改变后,你会得到你想要的颜色。