public Spanny Append(string text, ImageSpan imageSpan) { text = "." + text; Append(text); SetSpan(imageSpan, Length() - text.Length, Length() - text.Length + 1); return(this); }
private void UpdateNativeControl() { try { if ((Element as ItemLabel).IsLucky) { ImageSpan span = new ImageSpan(this.Context, Resource.Drawable.luckyStar); SpannableString spanStr = new SpannableString(Element.Text); spanStr.SetSpan(span, spanStr.Length() - 1, spanStr.Length(), SpanTypes.InclusiveExclusive); this.Control.SetText(spanStr, Android.Widget.TextView.BufferType.Normal); } else { if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { this.Control.SetText(Html.FromHtml(Element.Text, FromHtmlOptions.ModeLegacy), Android.Widget.TextView.BufferType.Normal); } else { this.Control.SetText(Html.FromHtml(Element.Text), Android.Widget.TextView.BufferType.Normal); } } } catch (System.Exception ex) { this.Control.Text = Element.Text; Crashes.TrackError(ex); } }
public override Java.Lang.ICharSequence GetPageTitleFormatted(int position) { Drawable myDrawable; switch (TabTypes[position]) { case TabType.ALL_SHOOTS: myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_home_white_24dp); break; case TabType.MY_SHOOTS: myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_clapperboard); break; case TabType.EDITS: default: myDrawable = ContextCompat.GetDrawable(context, Resource.Drawable.ic_film_roll); break; } var sb = new SpannableString(" "); // space added before text for convenience myDrawable.SetBounds(0, 0, myDrawable.IntrinsicWidth, myDrawable.IntrinsicHeight); var span = new ImageSpan(myDrawable); sb.SetSpan(span, 0, sb.Length(), SpanTypes.ExclusiveExclusive); return(sb); //return new Java.Lang.String(Titles[position]); }
protected override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data) //setimage on text view { base.OnActivityResult(requestCode, resultCode, data); Bitmap bitmap = null; switch (requestCode) { case GALLERY_REQUEST: if (resultCode == Result.Ok) { Android.Net.Uri selectedImage = data.Data; string Tag = '[' + selectedImage.LastPathSegment + ']'; bitmap = Multitools.decodeSampledBitmapFromUri(this, selectedImage, 2000, 2000); bitmap = Multitools.getResizedBitmap(bitmap, Resources.DisplayMetrics.WidthPixels - 100, Resources.DisplayMetrics.WidthPixels - 100); var imageSpan = new ImageSpan(this, bitmap); //Find your drawable. int selStart = EditText.SelectionEnd; var span = EditText.EditableText.GetSpans(0, EditText.Length(), Java.Lang.Class.FromType(typeof(ImageSpan))); ISpannable spann = SpannableFactory.Instance.NewSpannable(Tag); spann.SetSpan(imageSpan, 0, Tag.Length, SpanTypes.ExclusiveExclusive); if (selStart != 0) { EditText.EditableText.Insert(selStart, "\n"); } selStart = EditText.SelectionEnd; EditText.EditableText.Insert(selStart, spann); textWatcher.Editing = false; EditText.EditableText.Insert(selStart + Tag.Length, "\n"); textWatcher.Editing = true; } break; } }
void setImages(ICursor cursor) { if (cursor.MoveToFirst()) { string path; long id; long start; long end; Bitmap bitmap = null; do { id = cursor.GetLong(0); path = cursor.GetString(1); start = cursor.GetLong(2); end = cursor.GetLong(3); bitmap = SqlHelper.ReturnDrawableBase(id, path); path = '[' + path + ']'; var imageSpan = new ImageSpan(this, bitmap); ISpannable spann = SpannableFactory.Instance.NewSpannable(path); spann.SetSpan(imageSpan, 0, path.Length, SpanTypes.ExclusiveExclusive); textWatcher.Editing = false; EditText.EditableText.Replace((int)start, (int)end, spann); }while (cursor.MoveToNext()); } } //SetImages in Text
private void TagsEditTextOnAfterTextChanged(object sender, AfterTextChangedEventArgs e) { var length = e.Editable.Length(); var editable = e.Editable; if (length > 1 && e.Editable.CharAt(e.Editable.Length() - 1) == ' ') { var chip = ChipDrawable.CreateFromResource(Context, Resource.Xml.input_chip); chip.Text = editable.SubSequence(0, length); chip.SetBounds(0, 0, chip.IntrinsicWidth, chip.IntrinsicHeight); var span = new ImageSpan(chip); editable.SetSpan(span, 0, length, SpanTypes.ExclusiveExclusive); } }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.Second); var button = FindViewById <Button>(Resource.Id.closeButton); button.Click += (sender, e) => Finish(); var imageSpan = new ImageSpan(Application.Context, Resource.Mipmap.Icon); var spannableString = new SpannableString(" Close"); spannableString.SetSpan(imageSpan, 0, 1, 0); button.SetText(spannableString, TextView.BufferType.Spannable); }
private static void FormatImages(Context context, ISpannable spannable) { var text = spannable?.ToString(); if (string.IsNullOrWhiteSpace(text)) { return; } var matches = ImageRegex.Matches(text); foreach (var match in matches.ToList()) { var drawable = ContextCompat.GetDrawable(context, PlaceholderImage); drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight); var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline); var clickSpan = new CustomClickableSpan(); clickSpan.Click += (sender, e) => { var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(match.Groups[2].Value)); context.StartActivity(intent); }; spannable.SetSpan(clickSpan, match.Index, match.Index + match.Length, SpanTypes.InclusiveExclusive); spannable.SetSpan(imageSpan, match.Index, match.Index + match.Length, SpanTypes.InclusiveExclusive); if (!int.TryParse(match.Groups[1].Value, out var width)) { width = 250; } width = Math.Min(width, MaxImageWidth); Picasso.With(context).Load(match.Groups[2].Value) .Into(new DrawableTarget(spannable, match.Index, match.Index + match.Length, (int)(width * context.Resources.DisplayMetrics.Density))); } }
private static void FormatYoutube(Context context, ISpannable spannable) { var text = spannable?.ToString(); if (string.IsNullOrWhiteSpace(text)) { return; } var matches = YoutubeRegex.Matches(text); var playIcon = ContextCompat.GetDrawable(context, Resource.Drawable.svg_play); playIcon.SetColorFilter(Color.White, PorterDuff.Mode.SrcIn); playIcon.SetAlpha(150); foreach (var match in matches.ToList()) { var drawable = ContextCompat.GetDrawable(context, PlaceholderImage); drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight); var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline); var clickSpan = new CustomClickableSpan(); clickSpan.Click += (sender, e) => { var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(string.Format(YoutubeLinkUrl, match.Groups[1].Value))); context.StartActivity(intent); }; spannable.SetSpan(clickSpan, match.Index, match.Index + match.Length, SpanTypes.InclusiveExclusive); spannable.SetSpan(imageSpan, match.Index, match.Index + match.Length, SpanTypes.InclusiveExclusive); Picasso.With(context).Load(string.Format(YoutubeThumbnailUrl, match.Groups[1].Value)) .Into(new DrawableTarget(spannable, match.Index, match.Index + match.Length, (int)(250 * context.Resources.DisplayMetrics.Density), playIcon)); } }
public void OnBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom @from) { var scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, _width, (int)(bitmap.Height / ((float)bitmap.Width / _width)), true); if (_playIcon != null) { _playIcon.SetBounds((int)(scaledBitmap.Width * .35), (int)(scaledBitmap.Height * .3), (int)(scaledBitmap.Width * .65), (int)(scaledBitmap.Height * .7)); _playIcon.Draw(new Canvas(scaledBitmap)); } var drawable = new BitmapDrawable(Application.Context.Resources, scaledBitmap); drawable.SetBounds(0, 0, drawable.IntrinsicWidth, drawable.IntrinsicHeight); var imageSpan = new ImageSpan(drawable, SpanAlign.Baseline); _spannable.SetSpan(imageSpan, _start, _end, SpanTypes.InclusiveExclusive); }
private void Parse(Status status) { StringBuilder builder = new StringBuilder(); while (index < text.Length) { switch (text[index]) { case '*': if (status == Status.STRONG) { if (Match(text, index + 1, '*')) { if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } elems.Add(new StrongCloseTag()); index += 2; return; } } if (status == Status.EMPHASIS) { if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } elems.Add(new EmphasisCloseTag()); index += 1; return; } if (Match(text, index + 1, '*')) { // ** if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } index += 2; elems.Add(new StrongOpenTag()); Parse(Status.STRONG); } else { // * if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } index += 1; elems.Add(new EmphasisOpenTag()); Parse(Status.EMPHASIS); } break; case '`': if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } // `XXXXXXXXXXXXXXXXXXX` CodeSpan codeSpan = ParseCode(text, ref index); if (codeSpan != null) { elems.Add(codeSpan); } break; case '\\': if (index + 1 < text.Length) { // \? builder.Append(text[index + 1]); index += 2; } else { // \マークは消える index += 1; } break; case '[': if (Match(text, index + 1, '[')) { // [[ if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } HyperlinkSpan tag = ParseUrlHyperlink(text, ref index); if (tag != null) { elems.Add(tag); } continue; } else { // [ if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } HyperlinkSpan tag = ParseHyperlink(text, ref index); if (tag != null) { elems.Add(tag); } } break; case '!': if (Match(text, index + 1, '[')) { // ![ if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } ImageSpan tag = ParseImage(text, ref index); if (tag != null) { elems.Add(tag); } continue; } break; case '<': string element; Dictionary <string, string> attrs; bool closed; if (ParseHtmlTagClose(text, ref index, out element)) { if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } if (status == Status.HTML_EM) { if (element.ToLower() == "em") { elems.Add(new EmphasisCloseTag()); return; } } else if (status == Status.HTML_STRONG) { if (element.ToLower() == "strong") { elems.Add(new StrongCloseTag()); return; } } else if (status == Status.HTML_DEL) { if (element.ToLower() == "del") { elems.Add(new StrikethroughCloseTag()); return; } } else if (status == Status.HTML_SUP) { if (element.ToLower() == "sup") { elems.Add(new SuperscriptCloseTag()); return; } } else if (status == Status.HTML_SUB) { if (element.ToLower() == "sub") { elems.Add(new SubscriptCloseTag()); return; } } else if (status == Status.HTML_SMALL) { if (element.ToLower() == "small") { elems.Add(new SmallCloseTag()); return; } } throw new MdocParseException("予期せぬHTMLタグを検出しました。", line); } else if (ParseHtmlTagOpen(text, ref index, out closed, out element, out attrs)) { if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } element = element.ToLower(); if (element == "em") { elems.Add(new EmphasisOpenTag()); if (closed) { elems.Add(new EmphasisCloseTag()); } else { Parse(Status.HTML_EM); } } else if (element == "strong") { elems.Add(new StrongOpenTag()); if (closed) { elems.Add(new StrongCloseTag()); } else { Parse(Status.HTML_STRONG); } } else if (element == "del") { elems.Add(new StrikethroughOpenTag()); if (closed) { elems.Add(new StrikethroughCloseTag()); } else { Parse(Status.HTML_DEL); } } else if (element == "sup") { elems.Add(new SuperscriptOpenTag()); if (closed) { elems.Add(new SuperscriptCloseTag()); } else { Parse(Status.HTML_SUP); } } else if (element == "sub") { elems.Add(new SubscriptOpenTag()); if (closed) { elems.Add(new SubscriptCloseTag()); } else { Parse(Status.HTML_SUB); } } else if (element == "small") { elems.Add(new SmallOpenTag()); if (closed) { elems.Add(new SmallCloseTag()); } else { Parse(Status.HTML_SMALL); } } else { throw new MdocParseException("予期せぬHTMLタグを検出しました。", line); } } break; default: builder.Append(text[index]); index += 1; break; } } if (builder.Length > 0) { elems.Add(new TextSpan(builder.ToString())); builder.Clear(); } if (status == Status.EMPHASIS) { throw new MdocParseException(MessageResource.EmphasisError, line); } if (status == Status.STRONG) { throw new MdocParseException(MessageResource.BoldError, line); } if (status == Status.HTML_DEL) { throw new MdocParseException(MessageResource.HtmlDelError, line); } if (status == Status.HTML_EM) { throw new MdocParseException(MessageResource.HtmlEmError, line); } if (status == Status.HTML_STRONG) { throw new MdocParseException(MessageResource.HtmlStrongError, line); } if (status == Status.HTML_SUP) { throw new MdocParseException(MessageResource.HtmlSupError, line); } if (status == Status.HTML_SUB) { throw new MdocParseException(MessageResource.HtmlSubError, line); } if (status == Status.HTML_SMALL) { throw new MdocParseException(MessageResource.HtmlSmallError, line); } }
private static bool AddImages(Context context, SpannableString spannable) { string pattern = "\\Q[img src=\\E([a-zA-Z0-9_]+?)\\Q/]\\E"; //MatchCollection m = Regex.Matches(spannable, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase); //foreach (Match match in m) // Console.WriteLine("{0} (duplicates '{1}') at position {2}", match.Value, match.Groups[1].Value, match.Index); Java.Util.Regex.Pattern refImg = Java.Util.Regex.Pattern.Compile(pattern); bool hasChanges = false; Matcher matcher = refImg.Matcher(spannable); while (matcher.Find()) { bool set = true; foreach (ImageSpan span in spannable.GetSpans(matcher.Start(), matcher.End(), Java.Lang.Class.FromType(typeof(ImageSpan)))) { if (spannable.GetSpanStart(span) >= matcher.Start() && spannable.GetSpanEnd(span) <= matcher.End()) { spannable.RemoveSpan(span); } else { set = false; break; } } string resname = spannable.SubSequence(matcher.Start(1), matcher.End(1)).ToString().Trim(); //int id = context.Resources.GetIdentifier(resname, "drawable", context.PackageName); if (set) { hasChanges = true; int identifier = context.Resources.GetIdentifier("modezoneedit", "drawable", context.PackageName); bool isSvg = true; Bitmap bitmap2 = null; if (isSvg) { SvgBitmapDrawable oo = SvgFactory.GetDrawable(context.Resources, identifier); //oo.Mutate().SetColorFilter(0xffff0000, Android.Graphics.PorterDuff.Mode.Multiply); Bitmap bitmap = Bitmap.CreateBitmap(oo.Picture.Width, oo.Picture.Height, Bitmap.Config.Argb8888); Canvas canvas = new Canvas(bitmap); canvas.DrawPicture(oo.Picture); bitmap2 = Bitmap.CreateScaledBitmap(bitmap, (int)(bitmap.Width * 0.3), (int)(bitmap.Height * 0.3), false); } else { bitmap2 = BitmapFactory.DecodeResource(context.Resources, identifier); bitmap2 = Bitmap.CreateScaledBitmap(bitmap2, (int)(bitmap2.Width * 0.3), (int)(bitmap2.Height * 0.3), false); } ImageSpan span = new ImageSpan(context, bitmap2); spannable.SetSpan(span, matcher.Start(), matcher.End(), SpanTypes.ExclusiveExclusive); /*spannable.SetSpan(new ImageSpan(context, id), * matcher.Start(), * matcher.End(), * SpanTypes.ExclusiveExclusive * );*/ } //if (isLastPoint) canvas.DrawColor(Color.Green, PorterDuff.Mode.SrcAtop); //Bitmap b = BitmapFactory.DecodeResource(context.Resources, Resource.Drawable.ModeZoneEdit); } return(hasChanges); }
private void WriteText(TextWriter writer, TextElement[] elems) { foreach (TextElement i in elems) { if (i is TextSpan) { TextSpan s = (TextSpan)i; writer.Write(Escape(s.Text)); } else if (i is CodeSpan) { CodeSpan s = (CodeSpan)i; writer.Write(Escape(s.Text)); } else if (i is EmphasisOpenTag) { writer.Write("<em>"); } else if (i is EmphasisCloseTag) { writer.Write("</em>"); } else if (i is StrongOpenTag) { writer.Write("<strong>"); } else if (i is StrongCloseTag) { writer.Write("</strong>"); } else if (i is StrikethroughOpenTag) { writer.Write("<strike>"); } else if (i is StrikethroughCloseTag) { writer.Write("</strike>"); } else if (i is SuperscriptOpenTag) { writer.Write("<sup>"); } else if (i is SuperscriptCloseTag) { writer.Write("</sup>"); } else if (i is SubscriptOpenTag) { writer.Write("<sub>"); } else if (i is SubscriptCloseTag) { writer.Write("</sub>"); } else if (i is SmallOpenTag) { writer.Write("<small>"); } else if (i is SmallCloseTag) { writer.Write("</small>"); } else if (i is HyperlinkSpan) { HyperlinkSpan s = (HyperlinkSpan)i; writer.Write("<a href=\"{1}\">{0}</a>", Escape(s.Text), Escape(s.Href)); } else if (i is ImageSpan) { ImageSpan s = (ImageSpan)i; writer.Write("<img src=\"{1}\" alt=\"{0}\"/>", Escape(s.Text), Escape(s.Source)); } } }