如何在 Xamarin 表单中将开关状态从“开启”时的默认颜色更改为绿色(Android 默认为蓝色,iOS 默认为绿色)?

4

使用这段代码,当它处于“on”状态时,我得到了蓝色的开关。我想把它改成绿色。

using Xamarin.Forms;

namespace swithcasedemo
{
    public class MyPage : ContentPage
    {
        public MyPage ()
        {
            Content = new StackLayout { 
                Children = {
                    new Label { Text = "Hello ContentPage",
                        HorizontalOptions=LayoutOptions.Center,
                        VerticalOptions=LayoutOptions.CenterAndExpand
                    },
                    new Switch{
                        HorizontalOptions=LayoutOptions.Center,
                        VerticalOptions=LayoutOptions.CenterAndExpand,


                    },


                }
            };
        }
    }
}
2个回答

3

这对我来说适用于Android版本>= 4.1

//need to reference Drawables otherwise StateListDrawable is not recognized.
using Android.Graphics.Drawables;

//...
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
       //...
       mySwitch = view.FindViewById<Switch>(Resource.Id.theSwitchIdFromXml);
       //... 

        Android.Graphics.Color colorOn = Android.Graphics.Color.Green;
        Android.Graphics.Color colorOff = Android.Graphics.Color.Brown;
        Android.Graphics.Color colorDisabled = Android.Graphics.Color.Gray;

        StateListDrawable drawable = new StateListDrawable();
        drawable.AddState(new int[] { Android.Resource.Attribute.StateChecked }, new ColorDrawable(colorOn));
        drawable.AddState(new int[] { -Android.Resource.Attribute.StateEnabled }, new ColorDrawable(colorDisabled));
        drawable.AddState(new int[] { }, new ColorDrawable(colorOff));

        mySwitch.ThumbDrawable = drawable;
  }

“默认”状态需要作为最后添加。
希望这能有所帮助。

嗨, 我也想这样做,但是针对API 15(4.0.3-4.0.4)。 你有解决方案吗?或者在API 15中不可能实现这一点。 - Rajendra
您可以检查使用的API中是否有未包含的内容,是否有与Compat库中等效的内容。 - Daniele D.

1

对于你在Xamarin上的IOS项目,你只需要将这行代码放入AppDelegate.cs文件的FinishedLaunching方法中。

            UISwitch.Appearance.OnTintColor = Color.FromHex("#yourColor").ToUIColor();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接