开关颜色不是 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>
改变后,你会得到你想要的颜色。
通常你会像这样使用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.
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>
改变后,你会得到你想要的颜色。