private void callOnGlobalLayout(Crouton crouton, View croutonView) { var layoutListener = new GlobalLayoutListener(); layoutListener.OnGlobalLayout(delegate { if (Build.VERSION.SdkInt < BuildVersionCodes.JellyBean) { #pragma warning disable 618 croutonView?.ViewTreeObserver?.RemoveGlobalOnLayoutListener(layoutListener); #pragma warning restore 618 } else { croutonView?.ViewTreeObserver?.RemoveOnGlobalLayoutListener(layoutListener); } if (crouton.GetInAnimation() == null) { return; } croutonView?.StartAnimation(crouton.GetInAnimation()); AnnounceForAccessibilityCompat(crouton.GetActivity(), crouton.DataContext?.ToString() ?? "NULL"); sendMessageDelayed(crouton, REMOVE_CROUTON, crouton.DurationInMilliseconds + crouton.GetInAnimation().Duration); }); }
private void addCroutonToView(Crouton crouton) { // don't Add if it is already showing if (crouton.IsShowing()) { return; } var croutonView = crouton.GetView(); if (null == croutonView.Parent) { var parameters = croutonView.LayoutParameters ?? new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent); var activity = crouton.GetActivity(); if (null == activity || activity.IsFinishing) { return; } handleTranslucentActionBar((ViewGroup.MarginLayoutParams)parameters, activity); handleActionBarOverlay((ViewGroup.MarginLayoutParams)parameters, activity); activity.AddContentView(croutonView, parameters); } croutonView.RequestLayout(); // This is needed so the animation can use the measured with/height var observer = croutonView.ViewTreeObserver; if (null != observer) { callOnGlobalLayout(crouton, croutonView); } }