Entryの下線部の色を変える
Entryコントロールのカーソルの色を変えたいのだけれど,その途中で見つけたEntryコントロールの下線部の色を変更する方法.
カスタムレンダラーで変更する.Custom Renerer
[assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))] namespace Android.MyRenderers { public class MyEntryRenderer : EntryRenderer { protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged(e); if (Control == null || e.NewElement == null) return; if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) Control.BackgroundTintList = ColorStateList.ValueOf(Color.White); else Control.Background.SetColorFilter(Color.White, PorterDuff.Mode.SrcAtop); } } }
[assembly: ExportRenderer (typeof(Entry), typeof(MyEntryRenderer))] namespace iOS.MyRenderers { public class MyEntryRenderer : EntryRenderer { private CALayer _line; protected override void OnElementChanged(ElementChangedEventArgs e) { base.OnElementChanged (e); _line = null; if (Control == null || e.NewElement == null) return; Control.BorderStyle = UITextBorderStyle.None; _line = new CALayer { BorderColor = UIColor.FromRGB(174, 174, 174).CGColor, BackgroundColor = UIColor.FromRGB(174, 174, 174).CGColor, Frame = new CGRect (0, Frame.Height/2, Frame.Width * 2, 1f) }; Control.Layer.AddSublayer (_line); } } }
これはシンプルなのに,なぜカーソルとなると途端に見つからないのか.
上記に少し手を加えてXamarin.Forms.ColorからAndroid.Graphics.Colorに変換して使っている.
[assembly:ExportRenderer(typeof(Entry),typeof(MyEntryRenderer))] namespace TakeMeThereXamarinForms.Droid.Renderers { class MyEntryRenderer : EntryRenderer { public MyEntryRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) { base.OnElementChanged(e); if (Control == null || e.NewElement == null) return; if(Build.VERSION.SdkInt>=BuildVersionCodes.Lollipop) { //下線の色を変更 var color = Color.FromHex("#9BFFE6"); Control.BackgroundTintList = ColorStateList.ValueOf(color.ToAndroid()); } } } }