public bool OnActionItemClicked(ActionMode mode, IMenuItem item) { CharacterStyle cs; int start = edt.SelectionStart; int end = edt.SelectionEnd; SpannableStringBuilder ssb = new SpannableStringBuilder(edt.Text); switch (item.ItemId) { case Resource.Id.bold: cs = new StyleSpan(TypefaceStyle.Bold); ssb.SetSpan(cs, start, end, SpanTypes.ExclusiveExclusive); edt.Text = ssb.ToString(); return(true); case Resource.Id.italic: cs = new StyleSpan(TypefaceStyle.Italic); ssb.SetSpan(cs, start, end, SpanTypes.ExclusiveExclusive); edt.Text = ssb.ToString(); return(true); case Resource.Id.underline: cs = new UnderlineSpan(); ssb.SetSpan(cs, start, end, SpanTypes.ExclusiveExclusive); edt.Text = ssb.ToString(); return(true); case Resource.Id.strikethrough: cs = new StrikethroughSpan(); ssb.SetSpan(cs, start, end, SpanTypes.ExclusiveExclusive); edt.Text = ssb.ToString(); return(true); } return(false); }
void SetSpan(int start, int end, StrikethroughSpan span) { if (start == end) { EditText.EditableText.SetSpan(span, start, end, SpanTypes.InclusiveInclusive); } else { EditText.EditableText.SetSpan(span, start, end, SpanTypes.ExclusiveInclusive); } }
void DisableSpan(int start, int end, StrikethroughSpan span) { var spans = EditText.EditableText.GetSpans(start, end, Java.Lang.Class.FromType(typeof(StrikethroughSpan))); for (int i = spans.Length - 1; i >= 0; i--) { int spanEnd = EditText.EditableText.GetSpanEnd(spans[i]); int spanStart = EditText.EditableText.GetSpanStart(spans[i]); EditText.EditableText.RemoveSpan(spans[i]); if (spanStart < start) { EditText.EditableText.SetSpan(span, spanStart, start, SpanTypes.ExclusiveExclusive); } if (spanEnd > end) { EditText.EditableText.SetSpan(span, end, spanEnd, SpanTypes.ExclusiveExclusive); } } }
private static void HandleFormatRun(ISpannable spannableString, IAttributedTextRun run) { var attributes = run.Attributes; var start = run.Start; var end = start + run.Length; var fontName = attributes.GetFontName(); if (fontName != null) { var typefaceSpan = new TypefaceSpan(fontName); spannableString.SetSpan(typefaceSpan, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetBold() && attributes.GetItalic()) { var span = new StyleSpan(TypefaceStyle.BoldItalic); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } else if (attributes.GetBold()) { var span = new StyleSpan(TypefaceStyle.Bold); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } else if (attributes.GetItalic()) { var span = new StyleSpan(TypefaceStyle.Italic); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetUnderline()) { var span = new UnderlineSpan(); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } var foregroundColor = attributes.GetForegroundColor()?.ParseAsInts()?.ToColor(); if (foregroundColor != null) { var span = new ForegroundColorSpan((global::Android.Graphics.Color)foregroundColor); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } var backgroundColor = attributes.GetBackgroundColor()?.ParseAsInts()?.ToColor(); if (backgroundColor != null) { var span = new BackgroundColorSpan((global::Android.Graphics.Color)backgroundColor); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetSubscript()) { var span = new SubscriptSpan(); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetSuperscript()) { var span = new SuperscriptSpan(); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetStrikethrough()) { var span = new StrikethroughSpan(); spannableString.SetSpan(span, start, end, SpanTypes.ExclusiveExclusive); } if (attributes.GetUnorderedList()) { var bulletSpan = new BulletSpan(); spannableString.SetSpan(bulletSpan, start, end, SpanTypes.ExclusiveExclusive); } }