diff options
author | Samantha Houts <samantha@teamredwall.com> | 2016-04-18 09:46:51 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-04-18 09:46:51 -0700 |
commit | 75f112400223ea628ee008d311b7d5d54d98eafe (patch) | |
tree | af859c326a488cb0801fd57fca7bbce0cf0b4ad0 /Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs | |
parent | fc05a57e9dfa5b70e21b08f9c8f839b7986b4698 (diff) | |
download | xamarin-forms-75f112400223ea628ee008d311b7d5d54d98eafe.tar.gz xamarin-forms-75f112400223ea628ee008d311b7d5d54d98eafe.tar.bz2 xamarin-forms-75f112400223ea628ee008d311b7d5d54d98eafe.zip |
BarBackgroundColor and BarTextColor on TabbedPage (#96)
* [Core] Add properties to TabbedPage
* [Controls] Add properties to test page
* [iOS] Added BarBackgroundColor & BarTextColor to TabbedPage
* [A] Added BarBackgroundColor & BarTextColor to TabbedPage
* [UWP] Added BarBackgroundColor & BarTextColor to TabbedPage
* [WinRT] Format file
* [WinRT] Added BarBackgroundColor & BarTextColor to TabbedPage
* [Docs] Updated docs
Diffstat (limited to 'Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs index f978028b..28fbf49c 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/TabbedPageRenderer.cs @@ -2,6 +2,9 @@ using System; using System.Collections.Specialized; using System.ComponentModel; using Android.Content; +using Android.Content.Res; +using Android.Graphics; +using Android.Graphics.Drawables; using Android.OS; using Android.Runtime; using Android.Support.Design.Widget; @@ -13,6 +16,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { public class TabbedPageRenderer : VisualElementRenderer<TabbedPage>, TabLayout.IOnTabSelectedListener, ViewPager.IOnPageChangeListener, IManageFragments { + Drawable _backgroundDrawable; bool _disposed; FragmentManager _fragmentManager; TabLayout _tabLayout; @@ -149,7 +153,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat tabs = _tabLayout = new TabLayout(activity) { TabMode = TabLayout.ModeFixed, TabGravity = TabLayout.GravityFill }; FormsViewPager pager = _viewPager = - new FormsViewPager(activity) + new FormsViewPager(activity) { OverScrollMode = OverScrollMode.Never, EnableGesture = UseAnimations, @@ -173,6 +177,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat UpdateIgnoreContainerAreas(); tabbedPage.InternalChildren.CollectionChanged += OnChildrenCollectionChanged; + UpdateBarBackgroundColor(); + UpdateBarTextColor(); } } @@ -180,8 +186,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat { base.OnElementPropertyChanged(sender, e); - if (e.PropertyName == "CurrentPage") + if (e.PropertyName == nameof(TabbedPage.CurrentPage)) ScrollToCurrentPage(); + else if (e.PropertyName == NavigationPage.BarBackgroundColorProperty.PropertyName) + UpdateBarBackgroundColor(); + else if (e.PropertyName == NavigationPage.BarTextColorProperty.PropertyName) + UpdateBarTextColor(); } protected override void OnLayout(bool changed, int l, int t, int r, int b) @@ -318,5 +328,45 @@ namespace Xamarin.Forms.Platform.Android.AppCompat tab.SetIcon(ResourceManager.IdFromTitle(icon, ResourceManager.DrawableClass)); } } + + void UpdateBarBackgroundColor() + { + if (_disposed || _tabLayout == null) + return; + + Color tintColor = Element.BarBackgroundColor; + + if (Forms.IsLollipopOrNewer) + { + if (tintColor.IsDefault) + _tabLayout.BackgroundTintMode = null; + else + { + _tabLayout.BackgroundTintMode = PorterDuff.Mode.Src; + _tabLayout.BackgroundTintList = ColorStateList.ValueOf(tintColor.ToAndroid()); + } + } + else + { + if (tintColor.IsDefault && _backgroundDrawable != null) + _tabLayout.SetBackground(_backgroundDrawable); + else if (!tintColor.IsDefault) + { + if (_backgroundDrawable == null) + _backgroundDrawable = _tabLayout.Background; + _tabLayout.SetBackgroundColor(tintColor.ToAndroid()); + } + } + } + + private void UpdateBarTextColor() + { + if (_disposed || _tabLayout == null) + return; + + var textColor = Element.BarTextColor.ToAndroid().ToArgb(); + + _tabLayout.SetTabTextColors(textColor, textColor); + } } }
\ No newline at end of file |