public static ICharSequence Parse(Context context, IList<IconFontDescriptorWrapper> iconFontDescriptors, ICharSequence text, TextView target) { context = context.ApplicationContext; // Analyse the text and replace {} blocks With the appropriate character // Retain all transformations in the accumulator var spannableBuilder = new SpannableStringBuilder(text); RecursivePrepareSpannableIndexes(context, text.ToString(), spannableBuilder, iconFontDescriptors, 0); var isAnimated = HasAnimatedSpans(spannableBuilder); // If animated, periodically invalidate the TextView so that the // CustomTypefaceSpan can redraw itself if (isAnimated) { if (target == null) { throw new ArgumentException("You can't use \"spin\" without providing the target TextView."); } if (!(target is IHasOnViewAttachListener)) { throw new ArgumentException(target.GetType().Name + " does not implement " + "HasOnViewAttachListener. Please use IconTextView, IconButton or IconToggleButton."); } ((IHasOnViewAttachListener) target).OnViewAttachListener = new OnViewAttachListenerOnViewAttachListenerAnonymousInnerClassHelper(target); } else if (target is IHasOnViewAttachListener) { ((IHasOnViewAttachListener) target).OnViewAttachListener = null; } return spannableBuilder; }
public static ICharSequence Parse( Context context, List<IconFontDescriptorWrapper> iconFontDescriptors, string text, TextView target) { context = context.ApplicationContext; // Analyse the text and replace {} blocks with the appropriate character // Retain all transformations in the accumulator SpannableStringBuilder spannableBuilder = new SpannableStringBuilder(text); RecursivePrepareSpannableIndexes(context, text, spannableBuilder, iconFontDescriptors, 0); bool isAnimated = HasAnimatedSpans(spannableBuilder); if (isAnimated) { if (target == null) throw new IllegalArgumentException("You can't use \"spin\" without providing the target TextView."); if (!(target is IHasOnViewAttachListener)) throw new IllegalArgumentException(target.GetType().Name + " does not implement " + "HasOnViewAttachListener. Please use IconTextView, IconButton or IconToggleButton."); bool isAttached = false; var listener = new OnViewAttachListener(); listener.Attach += (s, e) => { isAttached = true; Runnable runnable = null; runnable = new Runnable(() => { if (isAttached) { target.Invalidate(); ViewCompat.PostOnAnimation(target, runnable); } }); ViewCompat.PostOnAnimation(target, runnable); }; listener.Detach += (s, e) => isAttached = false; ((IHasOnViewAttachListener)target).SetOnViewAttachListener(listener); } else { (target as IHasOnViewAttachListener)?.SetOnViewAttachListener(null); } return spannableBuilder; }