Skip to content

Commit 16ba650

Browse files
committed
Improve tab layout for older API levels
Increase minimum tab width. Use fill gravity and fixed mode if required.
1 parent 11bce49 commit 16ba650

File tree

5 files changed

+67
-5
lines changed

5 files changed

+67
-5
lines changed

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/fragment/DynamicViewPager2Fragment.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,23 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
7676

7777
mViewPager.setOffscreenPageLimit(getItemCount());
7878
mViewPager.registerOnPageChangeCallback(
79-
new DynamicOnPageChangeCallback(getChildFragmentManager()));
79+
new DynamicOnPageChangeCallback(getChildFragmentManager()) {
80+
@Override
81+
public void onPageSelected(int position) {
82+
super.onPageSelected(position);
83+
84+
Dynamic.setTextColor(getTabLayout());
85+
}
86+
87+
@Override
88+
public void onPageScrollStateChanged(int state) {
89+
super.onPageScrollStateChanged(state);
90+
91+
if (state == ViewPager2.SCROLL_STATE_IDLE) {
92+
Dynamic.setTextColor(getTabLayout());
93+
}
94+
}
95+
});
8096
mViewPager.setAdapter(new ViewPagerAdapter(this, this));
8197
Dynamic.addHeader(getActivity(), R.layout.ads_tabs,
8298
true, getSavedInstanceState() == null);

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/fragment/DynamicViewPagerFragment.java

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import androidx.fragment.app.FragmentManager;
2828
import androidx.fragment.app.FragmentStatePagerAdapter;
2929
import androidx.viewpager.widget.ViewPager;
30+
import androidx.viewpager2.widget.ViewPager2;
3031

3132
import com.google.android.material.tabs.TabLayout;
3233
import com.pranavpandey.android.dynamic.support.Dynamic;
@@ -75,7 +76,23 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
7576

7677
mViewPager.setOffscreenPageLimit(getItemCount());
7778
mViewPager.addOnPageChangeListener(
78-
new DynamicOnPageChangeListener(getChildFragmentManager()));
79+
new DynamicOnPageChangeListener(getChildFragmentManager()) {
80+
@Override
81+
public void onPageSelected(int position) {
82+
super.onPageSelected(position);
83+
84+
Dynamic.setTextColor(getTabLayout());
85+
}
86+
87+
@Override
88+
public void onPageScrollStateChanged(int state) {
89+
super.onPageScrollStateChanged(state);
90+
91+
if (state == ViewPager2.SCROLL_STATE_IDLE) {
92+
Dynamic.setTextColor(getTabLayout());
93+
}
94+
}
95+
});
7996
mViewPager.setAdapter(new ViewPagerAdapter(
8097
getChildFragmentManager(), this));
8198
Dynamic.addHeader(getActivity(), R.layout.ads_tabs,
@@ -94,8 +111,9 @@ public void onAddActivityHeader(@Nullable View view) {
94111
if (getContext() == null || view == null) {
95112
return;
96113
}
97-
114+
98115
mTabLayout = view.findViewById(R.id.ads_tab_layout);
116+
99117
mTabLayout.setupWithViewPager(mViewPager);
100118
}
101119

dynamic-support/src/main/java/com/pranavpandey/android/dynamic/support/widget/DynamicTabLayout.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.pranavpandey.android.dynamic.support.widget.base.DynamicTextWidget;
3939
import com.pranavpandey.android.dynamic.theme.Theme;
4040
import com.pranavpandey.android.dynamic.util.DynamicColorUtils;
41+
import com.pranavpandey.android.dynamic.util.DynamicSdkUtils;
4142

4243
/**
4344
* A {@link TabLayout} to apply {@link DynamicTheme} according to the supplied parameters.
@@ -176,7 +177,6 @@ public void loadFromAttributes(@Nullable AttributeSet attrs) {
176177
R.styleable.DynamicTabLayout_adt_contrast,
177178
Theme.Contrast.AUTO);
178179

179-
180180
if (a.getBoolean(R.styleable.DynamicTabLayout_adt_dynamicCornerSize,
181181
Defaults.ADS_DYNAMIC_CORNER_SIZE)) {
182182
setSelectedTabIndicator(DynamicShapeUtils.getTabIndicatorRes(
@@ -187,6 +187,11 @@ public void loadFromAttributes(@Nullable AttributeSet attrs) {
187187
}
188188

189189
initialize();
190+
191+
if (!DynamicSdkUtils.is19()) {
192+
setTabGravity(GRAVITY_FILL);
193+
setTabMode(MODE_FIXED);
194+
}
190195
}
191196

192197
@Override
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!--
3+
Copyright 2018-2022 Pranav Pandey
4+
5+
Licensed under the Apache License, Version 2.0 (the "License");
6+
you may not use this file except in compliance with the License.
7+
You may obtain a copy of the License at
8+
9+
http://www.apache.org/licenses/LICENSE-2.0
10+
11+
Unless required by applicable law or agreed to in writing, software
12+
distributed under the License is distributed on an "AS IS" BASIS,
13+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
See the License for the specific language governing permissions and
15+
limitations under the License.
16+
-->
17+
18+
<resources>
19+
20+
<!-- Toolbar -->
21+
<dimen name="ads_tab_min_width">48dp</dimen>
22+
23+
</resources>

dynamic-support/src/main/res/values/dimens.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@
208208
<dimen name="ads_toolbar_margin_end_collapsing">@dimen/ads_page_horizontal_margin</dimen>
209209
<dimen name="ads_tab_inset_start">@dimen/ads_toolbar_inset_start_small</dimen>
210210
<dimen name="ads_tab_height">44dp</dimen>
211-
<dimen name="ads_tab_min_width">48dp</dimen>
211+
<dimen name="ads_tab_min_width">240dp</dimen>
212212
<dimen name="ads_tab_indicator_margin_vertical">0dp</dimen>
213213
<dimen name="ads_tab_indicator_margin_horizontal">@dimen/ads_margin_medium</dimen>
214214
<dimen name="ads_tab_indicator_height">3dp</dimen>

0 commit comments

Comments
 (0)