当Toggled和禁用的android开关全部变灰时

时间:2017-09-11 14:20:53

标签: android ios xamarin xamarin.forms

Switch iOS

Switch Android

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

2 个答案:

答案 0 :(得分:5)

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

添加:

<item name="colorSwitchThumbNormal">#41D150</item>

API 19 - API 26上运行的表单:

enter image description here

  

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

如果您想更改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<Switch> 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但更改颜色:

enter image description here

你最终得到:

enter image description here

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

渲染器变为:

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

Resource.Drawable文件夹中的选择器(form_switch_selector.xml):

<?xml version="1.0" encoding="UTF-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:state_checked="true" android:drawable="@drawable/form_switch_track_selected" /> 
     <item android:drawable="@drawable/form_switch_track_mtrl_alpha" /> 
 </selector>

两个9Patch文件:

enter image description here enter image description here

结果:

enter image description here

答案 1 :(得分:1)

如果您想更改Xamarin表单中Effect控件的默认颜色,可以使用我们在Forms社区工具包中创建的((SwitchCompat)Control).ThumbDrawable.SetColorFilter(... ...

如果您愿意,也可以使用实际代码,可在此处使用

enter image description here

但最好是在我们的示例应用https://github.com/FormsCommunityToolkit/FormsCommunityToolkit/blob/dev/src/Effects/Effects.Android/Effects/Switch/SwitchChangeColor.cs

中使用它

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

{{1}}