コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        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);
                                                }
            };
        }