/// <summary> /// Adds a new Action at the specified index. /// </summary> /// <param name="legacyBarAction">the legacyBarAction to add</param> /// <param name="index">the position at which to add the legacyBarAction</param> public void AddAction(LegacyBarAction legacyBarAction, int index) { var addActionBar = false; var hideAction = false; if (!LegacyBarUtils.ActionFits(Context.Resources.DisplayMetrics.WidthPixels, Context.Resources.DisplayMetrics.Density, index, HasMenuButton, legacyBarAction.ActionType)) { if (!HasMenuButton) { addActionBar = _overflowLegacyBarAction.ActionList.Count == 0; _overflowLegacyBarAction.AddAction(legacyBarAction); hideAction = true; } } else { if (_overflowLegacyBarAction.ActionList.Count != 0) //exists { index = _overflowLegacyBarAction.Index; //bring it inside } hideAction = true; _actionsView.AddView(InflateAction(legacyBarAction), index); } //simply put it in the menu items to hide if we are a menu item. var taskAction = legacyBarAction as MenuItemLegacyBarAction; if (taskAction != null && hideAction) { MenuItemsToHide.Add(taskAction.MenuItemId); } if (addActionBar) { AddOverflowAction(_overflowLegacyBarAction); } }
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); } }; }