using Color = Android.Graphics.Color;
...
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (this.Control != null)
{
this.SetControl();
if (e.NewElement != null)
{
//还可以改其他颜色
this.ChangeCursorColor(Color.Transparent);
}
}
}
private void ChangeCursorColor(Color color)
{
if (this.Control == null)
{
return;
}
try
{
var cursorResource = Java.Lang.Class.FromType(typeof(TextView)).GetDeclaredField(CURSOR_DRAWABLE_RESOURCE);
cursorResource.Accessible = true;
int resId = cursorResource.GetInt(this.Control);
Java.Lang.Reflect.Field editorField = Java.Lang.Class.FromType(typeof(TextView)).GetDeclaredField(EDITOR_FIELD);
editorField.Accessible = true;
Drawable cursorDrawable = Context.GetDrawable(resId);
cursorDrawable.SetColorFilter(color, PorterDuff.Mode.SrcIn);
Java.Lang.Object editor = editorField.Get(this.Control);
if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Q)
{
this.Control.TextCursorDrawable = cursorDrawable;
}
else if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.P)
{
Java.Lang.Reflect.Field drawableForCursorField = editor.Class.GetDeclaredField(DRAWABLE_FOR_CURSOR_FIELD);
drawableForCursorField.Accessible = true;
drawableForCursorField.Set(editor, cursorDrawable);
}
else
{
Java.Lang.Reflect.Field cursorDrawableField = editor.Class.GetDeclaredField(CUSROR_DRAWABLE_FIELD);
cursorDrawableField.Accessible = true;
cursorDrawableField.Set(editor, new[] { cursorDrawable, cursorDrawable });
}
}
catch (Exception ex)
{
}
}
xamarin 自定义Entry 设置光标颜色CursorColor
最新推荐文章于 2021-07-23 09:32:56 发布