From 8fb46550756c16e1a3706ea6cd204831f751979b Mon Sep 17 00:00:00 2001 From: Seifer Date: Tue, 12 Apr 2016 18:43:21 +0300 Subject: [PATCH 1/2] Support icon gravity provider --- Library/Interfaces/IIconGravityProvider.cs | 10 ++++++++ Library/Library.csproj | 1 + Library/TabPageIndicator.cs | 28 +++++++++++++++++----- Libraryv4/Libraryv4.csproj | 3 +++ Sample/TestFragmentAdapter.cs | 8 ++++++- 5 files changed, 43 insertions(+), 7 deletions(-) create mode 100644 Library/Interfaces/IIconGravityProvider.cs diff --git a/Library/Interfaces/IIconGravityProvider.cs b/Library/Interfaces/IIconGravityProvider.cs new file mode 100644 index 0000000..798f3ee --- /dev/null +++ b/Library/Interfaces/IIconGravityProvider.cs @@ -0,0 +1,10 @@ +using Android.Views; + +namespace DK.Ostebaronen.Droid.ViewPagerIndicator.Interfaces +{ + public interface IIconGravityProvider + { + GravityFlags IconGravity { get; } + } +} + diff --git a/Library/Library.csproj b/Library/Library.csproj index 5a1a174..7f6368f 100644 --- a/Library/Library.csproj +++ b/Library/Library.csproj @@ -60,6 +60,7 @@ + diff --git a/Library/TabPageIndicator.cs b/Library/TabPageIndicator.cs index 7888a32..fe972a1 100644 --- a/Library/TabPageIndicator.cs +++ b/Library/TabPageIndicator.cs @@ -98,7 +98,7 @@ protected override void OnDetachedFromWindow() RemoveCallbacks(_tabSelector); } - private void AddTab(int index, ICharSequence text, int iconResId) + private void AddTab(int index, ICharSequence text, int iconResId, GravityFlags iconGravity) { var tabView = new TabView(Context, this) {Focusable = true, Index = index, TextFormatted = text}; tabView.Click += (sender, args) => @@ -113,7 +113,23 @@ private void AddTab(int index, ICharSequence text, int iconResId) }; if (iconResId != 0) - tabView.SetCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0); + { + switch (iconGravity) { + case GravityFlags.Top: + tabView.SetCompoundDrawablesWithIntrinsicBounds(0, iconResId, 0, 0); + break; + case GravityFlags.Right: + tabView.SetCompoundDrawablesWithIntrinsicBounds(0, 0, iconResId, 0); + break; + case GravityFlags.Bottom: + tabView.SetCompoundDrawablesWithIntrinsicBounds(0, 0, 0, iconResId); + break; + case GravityFlags.Left: + default: + tabView.SetCompoundDrawablesWithIntrinsicBounds(iconResId, 0, 0, 0); + break; + } + } _tabLayout.AddView(tabView, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MatchParent, 1)); } @@ -179,9 +195,9 @@ public void NotifyDataSetChanged() { _tabLayout.RemoveAllViews(); var adapter = _viewPager.Adapter; - IIconPageAdapter iconAdapter = null; - if (adapter is IIconPageAdapter) - iconAdapter = (IIconPageAdapter)adapter; + var iconAdapter = adapter as IIconPageAdapter; + var gravityProvider = adapter as IIconGravityProvider; + var iconGravity = gravityProvider != null ? gravityProvider.IconGravity : GravityFlags.NoGravity; var count = adapter.Count; for(var i = 0; i < count; i++) @@ -191,7 +207,7 @@ public void NotifyDataSetChanged() var iconResId = 0; if (iconAdapter != null) iconResId = iconAdapter.GetIconResId(i); - AddTab(i, title, iconResId); + AddTab(i, title, iconResId, iconGravity); } if (_selectedTabIndex > count) _selectedTabIndex = count - 1; diff --git a/Libraryv4/Libraryv4.csproj b/Libraryv4/Libraryv4.csproj index 4204627..928ec32 100644 --- a/Libraryv4/Libraryv4.csproj +++ b/Libraryv4/Libraryv4.csproj @@ -77,6 +77,9 @@ + + Interfaces\IIconGravityProvider.cs + diff --git a/Sample/TestFragmentAdapter.cs b/Sample/TestFragmentAdapter.cs index b86a96f..44cbf1f 100644 --- a/Sample/TestFragmentAdapter.cs +++ b/Sample/TestFragmentAdapter.cs @@ -1,9 +1,10 @@ using Android.Support.V4.App; using DK.Ostebaronen.Droid.ViewPagerIndicator.Interfaces; +using Android.Views; namespace Sample { - public class TestFragmentAdapter : FragmentPagerAdapter, IIconPageAdapter + public class TestFragmentAdapter : FragmentPagerAdapter, IIconPageAdapter, IIconGravityProvider { private static readonly string[] Content = {"This", "Is", "A", "Test"}; private static readonly int[] Icons = @@ -48,5 +49,10 @@ public int GetIconResId(int index) { return Icons[index % Icons.Length]; } + + public GravityFlags IconGravity + { + get { return GravityFlags.Top; } + } } } \ No newline at end of file From 9083344071d92d39cc27f0691448e8df3835c0ed Mon Sep 17 00:00:00 2001 From: Seifer Date: Tue, 12 Apr 2016 18:48:05 +0300 Subject: [PATCH 2/2] Move IIconGravityProvider demonstration from TestFragmentAdapter to GoogleMusicAdapter --- Sample/Tabs/SampleTabsWithIcons.cs | 10 +++++++++- Sample/TestFragmentAdapter.cs | 8 +------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Sample/Tabs/SampleTabsWithIcons.cs b/Sample/Tabs/SampleTabsWithIcons.cs index 33497ea..f02d9c7 100644 --- a/Sample/Tabs/SampleTabsWithIcons.cs +++ b/Sample/Tabs/SampleTabsWithIcons.cs @@ -5,6 +5,7 @@ using DK.Ostebaronen.Droid.ViewPagerIndicator.Interfaces; using Fragment = Android.Support.V4.App.Fragment; using FragmentManager = Android.Support.V4.App.FragmentManager; +using Android.Views; namespace Sample.Tabs { @@ -27,7 +28,9 @@ protected override void OnCreate(Bundle savedInstanceState) _indicator.SetViewPager(_pager); } - private class GoogleMusicAdapter : TestFragmentAdapter, IIconPageAdapter + private class GoogleMusicAdapter : TestFragmentAdapter, IIconPageAdapter + // TODO uncomment to see IIconGravityProvider effect (the icon renders on top of the tab title) + //, IIconGravityProvider { private static readonly string[] Content = { @@ -56,6 +59,11 @@ public override int Count public override Fragment GetItem(int p0) { return TestFragment.NewInstance(Content[p0 % Content.Length]); } public override Java.Lang.ICharSequence GetPageTitleFormatted(int p0) { return new Java.Lang.String(Content[p0 % Content.Length].ToUpper()); } + + public GravityFlags IconGravity + { + get { return GravityFlags.Top; } + } } } } \ No newline at end of file diff --git a/Sample/TestFragmentAdapter.cs b/Sample/TestFragmentAdapter.cs index 44cbf1f..b86a96f 100644 --- a/Sample/TestFragmentAdapter.cs +++ b/Sample/TestFragmentAdapter.cs @@ -1,10 +1,9 @@ using Android.Support.V4.App; using DK.Ostebaronen.Droid.ViewPagerIndicator.Interfaces; -using Android.Views; namespace Sample { - public class TestFragmentAdapter : FragmentPagerAdapter, IIconPageAdapter, IIconGravityProvider + public class TestFragmentAdapter : FragmentPagerAdapter, IIconPageAdapter { private static readonly string[] Content = {"This", "Is", "A", "Test"}; private static readonly int[] Icons = @@ -49,10 +48,5 @@ public int GetIconResId(int index) { return Icons[index % Icons.Length]; } - - public GravityFlags IconGravity - { - get { return GravityFlags.Top; } - } } } \ No newline at end of file