summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android/Renderers/ToolbarRenderer.cs
blob: f40b75f38ea2b5b860c8e1657585391eeb21b6e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using Android.Widget;
using AScrollView = Android.Widget.ScrollView;
using AButton = Android.Widget.Button;
using AView = Android.Views.View;

namespace Xamarin.Forms.Platform.Android
{
	public class ToolbarRenderer : ViewRenderer
	{
		public ToolbarRenderer()
		{
			AutoPackage = false;
		}

		protected override void OnElementChanged(ElementChangedEventArgs<View> e)
		{
			base.OnElementChanged(e);

			if (e.OldElement == null)
			{
				var layout = new LinearLayout(Context);
				layout.SetBackgroundColor(new Color(0.2, 0.2, 0.2, 0.5).ToAndroid());

				layout.Orientation = Orientation.Horizontal;

				SetNativeControl(layout);
			}
			else
			{
				var oldToolbar = (Toolbar)e.OldElement;
				oldToolbar.ItemAdded -= OnToolbarItemsChanged;
				oldToolbar.ItemRemoved -= OnToolbarItemsChanged;
			}

			UpdateChildren();

			var toolbar = (Toolbar)e.NewElement;
			toolbar.ItemAdded += OnToolbarItemsChanged;
			toolbar.ItemRemoved += OnToolbarItemsChanged;
		}

		void OnToolbarItemsChanged(object sender, ToolbarItemEventArgs e)
		{
			UpdateChildren();
		}

		void UpdateChildren()
		{
			RemoveAllViews();

			foreach (ToolbarItem child in ((Toolbar)Element).Items)
			{
				AView view = null;

				if (!string.IsNullOrEmpty(child.Icon))
					view = new ToolbarImageButton(Context, child);
				else
					view = new AButton(Context);

				using(var param = new LinearLayout.LayoutParams(LayoutParams.WrapContent, (int)Context.ToPixels(48), 1))
					((LinearLayout)Control).AddView(view, param);
			}
		}
	}
}