void OnActionItemClickedImpl(IMenuItem item) { int index = item.ItemId; IMenuItemController action = ActionModeContext.ContextActions[index]; action.Activate(); }
Native.Button GetToolbarButton(ToolbarButtonPosition position) { ToolbarItem item = _toolbarTracker.ToolbarItems.Where( i => (position == ToolbarButtonPosition.Right && i.Order <= ToolbarItemOrder.Primary) || (position == ToolbarButtonPosition.Left && i.Order == ToolbarItemOrder.Secondary)) .OrderBy(i => i.Priority).FirstOrDefault(); if (item == default(ToolbarItem)) { return(null); } Native.Button button = new Native.Button(Forms.NativeParent); button.Clicked += (s, e) => { IMenuItemController control = item; control.Activate(); }; button.Text = item.Text; button.BackgroundColor = Color.Transparent.ToNative(); if (string.IsNullOrEmpty(item.Icon)) { if (string.IsNullOrEmpty(item.Text)) { // We assumed the default toolbar icon is "naviframe/drawer" if there are no icon and text. button.Style = StyleDefaultToolbarIcon; } else { if (position == ToolbarButtonPosition.Right) { button.Style = StyleRightToolbarButton; } else { button.Style = StyleLeftToolBarButton; } } } else { Native.Image iconImage = new Native.Image(Forms.NativeParent); var task = iconImage.LoadFromImageSourceAsync(item.Icon); button.Image = iconImage; } return(button); }
internal void PrepareMenu(IMenu menu) { if (_embedded) { return; } foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { item.PropertyChanged -= HandleToolbarItemPropertyChanged; } menu.Clear(); if (!ShouldShowActionBarTitleArea()) { return; } foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { IMenuItemController controller = item; item.PropertyChanged += HandleToolbarItemPropertyChanged; if (item.Order == ToolbarItemOrder.Secondary) { IMenuItem menuItem = menu.Add(item.Text); menuItem.SetEnabled(controller.IsEnabled); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } else { IMenuItem menuItem = menu.Add(item.Text); var icon = item.Icon; if (!string.IsNullOrEmpty(icon)) { Drawable iconDrawable = _context.GetFormsDrawable(icon); if (iconDrawable != null) { menuItem.SetIcon(iconDrawable); } } menuItem.SetEnabled(controller.IsEnabled); menuItem.SetShowAsAction(ShowAsAction.Always); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } } }
void UpdateMenu() { if (_disposed) { return; } AToolbar bar = _toolbar; Context context = Context; IMenu menu = bar.Menu; foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { item.PropertyChanged -= HandleToolbarItemPropertyChanged; } menu.Clear(); foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { IMenuItemController controller = item; item.PropertyChanged += HandleToolbarItemPropertyChanged; if (item.Order == ToolbarItemOrder.Secondary) { IMenuItem menuItem = menu.Add(item.Text); menuItem.SetEnabled(controller.IsEnabled); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } else { IMenuItem menuItem = menu.Add(item.Text); FileImageSource icon = item.Icon; if (!string.IsNullOrEmpty(icon)) { Drawable iconDrawable = context.GetFormsDrawable(icon); if (iconDrawable != null) { menuItem.SetIcon(iconDrawable); } } menuItem.SetEnabled(controller.IsEnabled); menuItem.SetShowAsAction(ShowAsAction.Always); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } } }
internal void PrepareMenu(IMenu menu) { foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { item.PropertyChanged -= HandleToolbarItemPropertyChanged; } menu.Clear(); if (!ShouldShowActionBarTitleArea()) { return; } foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { IMenuItemController controller = item; item.PropertyChanged += HandleToolbarItemPropertyChanged; if (item.Order == ToolbarItemOrder.Secondary) { IMenuItem menuItem = menu.Add(item.Text); menuItem.SetEnabled(controller.IsEnabled); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } else { IMenuItem menuItem = menu.Add(item.Text); if (!string.IsNullOrEmpty(item.Icon)) { var iconBitmap = new BitmapDrawable(_context.Resources, ResourceManager.GetBitmap(_context.Resources, item.Icon)); if (iconBitmap != null && iconBitmap.Bitmap != null) { menuItem.SetIcon(iconBitmap); } } menuItem.SetEnabled(controller.IsEnabled); menuItem.SetShowAsAction(ShowAsAction.Always); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); } } }
void UpdateMenu() { if (_disposed) { return; } AToolbar bar = _toolbar; Context context = Context; IMenu menu = bar.Menu; foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { item.PropertyChanged -= OnToolbarItemPropertyChanged; } menu.Clear(); foreach (ToolbarItem item in _toolbarTracker.ToolbarItems) { IMenuItemController controller = item; item.PropertyChanged += OnToolbarItemPropertyChanged; if (item.Order == ToolbarItemOrder.Secondary) { IMenuItem menuItem = menu.Add(item.Text); menuItem.SetEnabled(controller.IsEnabled); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); menuItem.SetTitleOrContentDescription(item); } else { IMenuItem menuItem = menu.Add(item.Text); menuItem.SetEnabled(controller.IsEnabled); UpdateMenuItemIcon(context, menuItem, item); menuItem.SetShowAsAction(ShowAsAction.Always); menuItem.SetOnMenuItemClickListener(new GenericMenuClickListener(controller.Activate)); menuItem.SetTitleOrContentDescription(item); } } }
internal void UpdateMenuItemBadge(IMenuItem menuItem, BadgeToolbarItem item) { var color = item.BadgeColor.ToAndroid(); var colorPressed = item.BadgePressedColor.ToAndroid(); var textColor = item.BadgeTextColor.ToAndroid(); var badgeStyle = new BadgeStyle(BadgeStyle.Style.Default, Resource.Layout.menu_action_item_badge, color, colorPressed, textColor); var iconDrawable = GetFormsDrawable(item.Icon); IMenuItemController menuItemController = item; ActionItemBadge.Update(MainActivity, menuItem, iconDrawable, badgeStyle, item.BadgeText, new MenuClickListener(menuItemController.Activate)); }
void TaggedAppBarButton_PropertyChanged(object sender, PropertyChangedEventArgs e) { var item = Tag as ToolbarItem; if (item == null) { return; } IMenuItemController controller = item; if (e.PropertyName == controller.IsEnabledPropertyName) { IsEnabled = controller.IsEnabled; } else if (e.PropertyName == MenuItem.TextProperty.PropertyName) { Text = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "ApplicationIcon.jpg"; } else if (e.PropertyName == MenuItem.IconProperty.PropertyName) { IconUri = new Uri(item.Icon ?? "ApplicationIcon.jpg", UriKind.Relative); } }
void UpdateToolbarItems() { if (_page.ApplicationBar == null) { _page.ApplicationBar = new ApplicationBar(); } ToolbarItem[] items = _tracker.ToolbarItems.ToArray(); MasterDetailPage masterDetail = _tracker.Target.Descendants().Prepend(_tracker.Target).OfType <MasterDetailPage>().FirstOrDefault(); TaggedAppBarButton oldMasterDetailButton = _page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().FirstOrDefault(b => b.Tag is MasterDetailPage && b.Tag != masterDetail); if (oldMasterDetailButton != null) { _page.ApplicationBar.Buttons.Remove(oldMasterDetailButton); } if (masterDetail != null) { if (masterDetail.ShouldShowToolbarButton()) { if (_page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().All(b => b.Tag != masterDetail)) { var button = new TaggedAppBarButton { IconUri = new Uri(masterDetail.Master.Icon ?? "ApplicationIcon.jpg", UriKind.Relative), Text = masterDetail.Master.Title, IsEnabled = true, Tag = masterDetail }; button.Click += (sender, args) => { var masterDetailRenderer = GetRenderer(masterDetail) as MasterDetailRenderer; if (masterDetailRenderer != null) { masterDetailRenderer.Toggle(); } }; _page.ApplicationBar.Buttons.Add(button); } } } var buttonsToAdd = new List <TaggedAppBarButton>(); foreach (ToolbarItem item in items.Where(i => i.Order != ToolbarItemOrder.Secondary)) { IMenuItemController controller = item; if (_page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().Any(b => b.Tag == item)) { continue; } var button = new TaggedAppBarButton { IconUri = new Uri(item.Icon ?? "ApplicationIcon.jpg", UriKind.Relative), Text = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "ApplicationIcon.jpg", IsEnabled = controller.IsEnabled, Tag = item }; button.Click += (sender, args) => controller.Activate(); buttonsToAdd.Add(button); } var menuItemsToAdd = new List <TaggedAppBarMenuItem>(); foreach (ToolbarItem item in items.Where(i => i.Order == ToolbarItemOrder.Secondary)) { if (_page.ApplicationBar.MenuItems.OfType <TaggedAppBarMenuItem>().Any(b => b.Tag == item)) { continue; } var button = new TaggedAppBarMenuItem { Text = !string.IsNullOrWhiteSpace(item.Text) ? item.Text : (string)item.Icon ?? "MenuItem", IsEnabled = true, Tag = item }; button.Click += (sender, args) => ((IMenuItemController)item).Activate(); menuItemsToAdd.Add(button); } TaggedAppBarButton[] deadButtons = _page.ApplicationBar.Buttons.OfType <TaggedAppBarButton>().Where(b => b.Tag is ToolbarItem && !items.Contains(b.Tag)).ToArray(); TaggedAppBarMenuItem[] deadMenuItems = _page.ApplicationBar.MenuItems.OfType <TaggedAppBarMenuItem>().Where(b => b.Tag is ToolbarItem && !items.Contains(b.Tag)).ToArray(); // we must remove the dead buttons before adding the new ones so we don't accidentally go over the limit during the transition foreach (TaggedAppBarButton deadButton in deadButtons) { deadButton.Dispose(); _page.ApplicationBar.Buttons.Remove(deadButton); } foreach (TaggedAppBarMenuItem deadMenuItem in deadMenuItems) { _page.ApplicationBar.MenuItems.Remove(deadMenuItem); } // fixme, insert in order foreach (TaggedAppBarButton newButton in buttonsToAdd) { _page.ApplicationBar.Buttons.Add(newButton); } foreach (TaggedAppBarMenuItem newMenuItem in menuItemsToAdd) { _page.ApplicationBar.MenuItems.Add(newMenuItem); } _page.ApplicationBar.IsVisible = _page.ApplicationBar.Buttons.Count > 0 || _page.ApplicationBar.MenuItems.Count > 0; }