protected override void Dispose(bool disposing) { if (disposing) { if (null != ItemBackgroundDrawable) ItemBackgroundDrawable.Dispose(); if (null != _inflater) _inflater.Dispose(); if (null != _overflowLegacyBarAction) _overflowLegacyBarAction.Dispose(); ItemBackgroundDrawable = null; _inflater = null; _barView = null; _logoView = null; _backIndicator = null; _titleView = null; _actionsView = null; _homeBtn = null; _homeLayout = null; _progress = null; _titleLayout = null; _overflowLegacyBarAction = null; } base.Dispose(disposing); }
public LegacyBar(Context context, IAttributeSet attrs) : base(context, attrs) { ResourceIdManager.UpdateIdValues(); _inflater = LayoutInflater.From(Context); //_inflater = (LayoutInflater)context.GetSystemService(Context.LayoutInflaterService); _barView = (RelativeLayout)_inflater.Inflate(Resource.Layout.actionbar, null); AddView(_barView); _logoView = _barView.FindViewById(Resource.Id.actionbar_home_logo) as ImageView; _homeLayout = _barView.FindViewById<RelativeLayout>(Resource.Id.actionbar_home_bg); _homeBtn = _barView.FindViewById<ImageButton>(Resource.Id.actionbar_home_btn); _backIndicator = _barView.FindViewById(Resource.Id.actionbar_home_is_back); _titleView = _barView.FindViewById<TextView>(Resource.Id.actionbar_title); _actionsView = _barView.FindViewById<LinearLayout>(Resource.Id.actionbar_actions); _progress = _barView.FindViewById<ProgressBar>(Resource.Id.actionbar_progress); _titleLayout = _barView.FindViewById<RelativeLayout>(Resource.Id.actionbar_title_layout); _titleDropdown = _barView.FindViewById<Spinner>(Resource.Id.actionbar_spinner); _overflowLegacyBarAction = new OverflowLegacyBarAction(Context); //Custom Attributes (defined in Attrs.xml) var a = Context.ObtainStyledAttributes(attrs, Resource.Styleable.actionbar); //grab theme attributes Theme = (LegacyBarTheme)a.GetInt(Resource.Styleable.actionbar_theme, 0); IsBottom = a.GetBoolean(Resource.Styleable.actionbar_is_bottom, false); LightIcons = a.GetBoolean(Resource.Styleable.actionbar_light_icons, false); //if we are not custom don't let them set it. if (Theme != LegacyBarTheme.Custom) { LightIcons = Theme == LegacyBarTheme.HoloLight; } _overflowLegacyBarAction.SetIconColor(LightIcons); var title = a.GetString(Resource.Styleable.actionbar_title); if (null != title) Title = title; var titleColor = a.GetColor(Resource.Styleable.actionbar_title_color, Resources.GetColor(Resource.Color.actionbar_title)); TitleColor = titleColor; var separatorColor = a.GetColor(Resource.Styleable.actionbar_separator, Resources.GetColor(Resource.Color.actionbar_separator)); _actionsView.SetBackgroundColor(separatorColor); _homeLayout.SetBackgroundColor(separatorColor); using (var background = a.GetDrawable(Resource.Styleable.actionbar_background)) //recycling the drawable immediately { if (null != background) BackgroundDrawable = background; } var backgroundItem = a.GetDrawable(Resource.Styleable.actionbar_background_item); if (null != backgroundItem) ItemBackgroundDrawable = backgroundItem; if (IsBottom) { LegacyBarUtils.SetBottomLegacyBarTheme(this, Theme); } else { LegacyBarUtils.SetLegacyBarTheme(this, Theme); } a.Recycle(); _titleView.Click += (s, e) => { if (null != TitleClick) TitleClick(s, e); }; _titleView.LongClick += (s, e) => { if (null != TitleLongClick) TitleLongClick(s, e); }; }