コード例 #1
0
        public bool AddSmiles(Context context, ISpannable spannable)
        {
            var hasChanges = false;

            foreach (var entry in Emoticons)
            {
                var smiley      = entry.Key;
                var smileyImage = entry.Value;
                var indices     = spannable.ToString().IndexesOf(smiley);
                foreach (var index in indices)
                {
                    var set = true;
                    foreach (ImageSpan span in spannable.GetSpans(index, index + smiley.Length, Java.Lang.Class.FromType(typeof(ImageSpan))))
                    {
                        if (spannable.GetSpanStart(span) >= index && spannable.GetSpanEnd(span) <= index + smiley.Length)
                        {
                            spannable.RemoveSpan(span);
                        }
                        else
                        {
                            set = false;
                            break;
                        }
                    }
                    if (set)
                    {
                        hasChanges = true;
                        spannable.SetSpan(new ImageSpan(context, smileyImage), index, index + smiley.Length, SpanTypes.ExclusiveExclusive);
                    }
                }
            }
            return(hasChanges);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
 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
コード例 #4
0
ファイル: HtmlLabelRenderer.cs プロジェクト: dorisoy/Wesley
        private void MakeLinkClickable(ISpannable strBuilder, URLSpan span)
        {
            var start     = strBuilder.GetSpanStart(span);
            var end       = strBuilder.GetSpanEnd(span);
            var flags     = strBuilder.GetSpanFlags(span);
            var clickable = new MyClickableSpan((HtmlLabel)Element, span);

            strBuilder.SetSpan(clickable, start, end, flags);
            strBuilder.RemoveSpan(span);
        }
コード例 #5
0
        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)));
            }
        }
コード例 #6
0
        private static void MakeLinkClickable(ISpannable spannable, URLSpan span)
        {
            var start         = spannable.GetSpanStart(span);
            var end           = spannable.GetSpanEnd(span);
            var flags         = spannable.GetSpanFlags(span);
            var clickableLink = new ClickableLinkSpan(span.URL);

            spannable.SetSpan(clickableLink, start, end, flags);
            spannable.RemoveSpan(span);
        }
コード例 #7
0
        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));
            }
        }
コード例 #8
0
        /**
         * Adds a highlight background color span to the TextView.
         */
        protected void HighlightUrl(TextView textView, ClickableSpanWithText spanWithText, ISpannable text)
        {
            if (_isUrlHighlighted)
            {
                return;
            }

            _isUrlHighlighted = true;

            var spanStart = text.GetSpanStart(spanWithText.Span);
            var spanEnd   = text.GetSpanEnd(spanWithText.Span);

            text.SetSpan(new BackgroundColorSpan(textView.HighlightColor), spanStart, spanEnd, SpanTypes.InclusiveInclusive);
            textView.SetText(text, TextView.BufferType.Spannable);

            Selection.SetSelection(text, spanStart, spanEnd);
        }
コード例 #9
0
            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);
            }
コード例 #10
0
ファイル: EmojiconHandler.cs プロジェクト: Lina84/EmotIcons
        /**
         * Convert emoji characters of the given Spannable to the according emojicon.
         *
         * @param context
         * @param text
         * @param emojiSize
         * @param index
         * @param length
         */
        public static void AddEmojis(Context context, ISpannable text, int emojiSize, int index, int length)
        {
            int textLength = text.Length();
            int textLengthToProcessMax = textLength - index;
            int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length+index);

            // remove spans throughout all text
            //EmojiconSpan[]
            var oldSpans = text.GetSpans(0, textLength,Java.Lang.Class.FromType(typeof(EmojiconSpan)));
            for (int i = 0; i < oldSpans.Length; i++) {
            text.RemoveSpan(oldSpans[i]);
            }

            int skip;
            for (int i = index; i < textLengthToProcess; i += skip)
            {
            skip = 0;
            int icon = 0;
            char c = text.CharAt(i);
            if (IsSoftBankEmoji(c))
            {
                icon = GetSoftbankEmojiResource(c);
                skip = icon == 0 ? 0 : 1;
            }

            if (icon == 0)
            {
                int unicode = Character.CodePointAt(text, i);
                skip = Character.CharCount(unicode);

                if (unicode > 0xff)
                {
                    icon = GetEmojiResource(context, unicode);
                }

                if (icon == 0 && i + skip < textLengthToProcess)
                {
                    int followUnicode = Character.CodePointAt(text, i + skip);
                    if (followUnicode == 0x20e3)
                    {
                        int followSkip = Character.CharCount(followUnicode);
                        switch (unicode)
                        {
                            case 0x0031:
                                icon = Resource.Drawable.emoji_0031;
                                break;
                            case 0x0032:
                                icon = Resource.Drawable.emoji_0032;
                                break;
                            case 0x0033:
                                icon = Resource.Drawable.emoji_0033;
                                break;
                            case 0x0034:
                                icon = Resource.Drawable.emoji_0034;
                                break;
                            case 0x0035:
                                icon = Resource.Drawable.emoji_0035;
                                break;
                            case 0x0036:
                                icon = Resource.Drawable.emoji_0036;
                                break;
                            case 0x0037:
                                icon = Resource.Drawable.emoji_0037;
                                break;
                            case 0x0038:
                                icon = Resource.Drawable.emoji_0038;
                                break;
                            case 0x0039:
                                icon = Resource.Drawable.emoji_0039;
                                break;
                            case 0x0030:
                                icon = Resource.Drawable.emoji_0030;
                                break;
                            case 0x0023:
                                icon = Resource.Drawable.emoji_0023;
                                break;
                            default:
                                followSkip = 0;
                                break;
                        }
                        skip += followSkip;
                    }
                    else
                    {
                        int followSkip = Character.CharCount(followUnicode);
                        switch (unicode)
                        {
                            case 0x1f1ef:
                                icon = (followUnicode == 0x1f1f5) ? Resource.Drawable.emoji_1f1ef_1f1f5 : 0;
                                break;
                            case 0x1f1fa:
                                icon = (followUnicode == 0x1f1f8) ? Resource.Drawable.emoji_1f1fa_1f1f8 : 0;
                                break;
                            case 0x1f1eb:
                                icon = (followUnicode == 0x1f1f7) ? Resource.Drawable.emoji_1f1eb_1f1f7 : 0;
                                break;
                            case 0x1f1e9:
                                icon = (followUnicode == 0x1f1ea) ? Resource.Drawable.emoji_1f1e9_1f1ea : 0;
                                break;
                            case 0x1f1ee:
                                icon = (followUnicode == 0x1f1f9) ? Resource.Drawable.emoji_1f1ee_1f1f9 : 0;
                                break;
                            case 0x1f1ec:
                                icon = (followUnicode == 0x1f1e7) ? Resource.Drawable.emoji_1f1ec_1f1e7 : 0;
                                break;
                            case 0x1f1ea:
                                icon = (followUnicode == 0x1f1f8) ? Resource.Drawable.emoji_1f1ea_1f1f8 : 0;
                                break;
                            case 0x1f1f7:
                                icon = (followUnicode == 0x1f1fa) ? Resource.Drawable.emoji_1f1f7_1f1fa : 0;
                                break;
                            case 0x1f1e8:
                                icon = (followUnicode == 0x1f1f3) ? Resource.Drawable.emoji_1f1e8_1f1f3 : 0;
                                break;
                            case 0x1f1f0:
                                icon = (followUnicode == 0x1f1f7) ? Resource.Drawable.emoji_1f1f0_1f1f7 : 0;
                                break;
                            default:
                                followSkip = 0;
                                break;
                        }
                        skip += followSkip;
                    }
                }
            }

            if (icon > 0)
            {
                text.SetSpan(new EmojiconSpan(context, icon, emojiSize), i, i + skip, SpanTypes.ExclusiveExclusive);
            }
            }
        }
コード例 #11
0
ファイル: SpannableTools.cs プロジェクト: kishoredbn/Android
		// Taken from https://gist.githubusercontent.com/Cheesebaron/5034440/raw/f962c41c95f8d94457ef9a60e19fe7efa2a50d61/SpannableTools.cs
		public static bool AddSmiles(Context context, ISpannable spannable)
		{
			var hasChanges = false;
			foreach (var entry in Emoticons)
			{
				var smiley = entry.Key;
				var smileyImage = entry.Value;
				var indices = spannable.ToString().IndexesOf(smiley);
				var index = 0;
				foreach (var token in spannable.ToString().Split(' '))
				{
					if (token.Equals (smiley)) {
						var set = true;
						foreach (ImageSpan span in spannable.GetSpans(index, index + smiley.Length, Java.Lang.Class.FromType(typeof(ImageSpan)))) {
							if (spannable.GetSpanStart (span) >= index && spannable.GetSpanEnd (span) <= index + smiley.Length)
								spannable.RemoveSpan (span);
							else {
								set = false;
								break;
							}
						}
						if (set) {
							hasChanges = true;
							spannable.SetSpan (new ImageSpan (context, smileyImage), index, index + smiley.Length, SpanTypes.ExclusiveExclusive);
						}
					}
					index += token.Length + 1;
				}
			}
			return hasChanges;
		}
コード例 #12
0
        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);
            }
        }