Skip to content

Commit

Permalink
Improve tab layout for older API levels
Browse files Browse the repository at this point in the history
Increase minimum tab width.
Use fill gravity and fixed mode if required.
  • Loading branch information
pranavpandey committed Nov 28, 2022
1 parent 11bce49 commit 16ba650
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,23 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat

mViewPager.setOffscreenPageLimit(getItemCount());
mViewPager.registerOnPageChangeCallback(
new DynamicOnPageChangeCallback(getChildFragmentManager()));
new DynamicOnPageChangeCallback(getChildFragmentManager()) {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);

Dynamic.setTextColor(getTabLayout());
}

@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);

if (state == ViewPager2.SCROLL_STATE_IDLE) {
Dynamic.setTextColor(getTabLayout());
}
}
});
mViewPager.setAdapter(new ViewPagerAdapter(this, this));
Dynamic.addHeader(getActivity(), R.layout.ads_tabs,
true, getSavedInstanceState() == null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import androidx.viewpager2.widget.ViewPager2;

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

mViewPager.setOffscreenPageLimit(getItemCount());
mViewPager.addOnPageChangeListener(
new DynamicOnPageChangeListener(getChildFragmentManager()));
new DynamicOnPageChangeListener(getChildFragmentManager()) {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);

Dynamic.setTextColor(getTabLayout());
}

@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);

if (state == ViewPager2.SCROLL_STATE_IDLE) {
Dynamic.setTextColor(getTabLayout());
}
}
});
mViewPager.setAdapter(new ViewPagerAdapter(
getChildFragmentManager(), this));
Dynamic.addHeader(getActivity(), R.layout.ads_tabs,
Expand All @@ -94,8 +111,9 @@ public void onAddActivityHeader(@Nullable View view) {
if (getContext() == null || view == null) {
return;
}

mTabLayout = view.findViewById(R.id.ads_tab_layout);

mTabLayout.setupWithViewPager(mViewPager);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
import com.pranavpandey.android.dynamic.support.widget.base.DynamicTextWidget;
import com.pranavpandey.android.dynamic.theme.Theme;
import com.pranavpandey.android.dynamic.util.DynamicColorUtils;
import com.pranavpandey.android.dynamic.util.DynamicSdkUtils;

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


if (a.getBoolean(R.styleable.DynamicTabLayout_adt_dynamicCornerSize,
Defaults.ADS_DYNAMIC_CORNER_SIZE)) {
setSelectedTabIndicator(DynamicShapeUtils.getTabIndicatorRes(
Expand All @@ -187,6 +187,11 @@ public void loadFromAttributes(@Nullable AttributeSet attrs) {
}

initialize();

if (!DynamicSdkUtils.is19()) {
setTabGravity(GRAVITY_FILL);
setTabMode(MODE_FIXED);
}
}

@Override
Expand Down
23 changes: 23 additions & 0 deletions dynamic-support/src/main/res/values-v19/dimens.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2018-2022 Pranav Pandey
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<resources>

<!-- Toolbar -->
<dimen name="ads_tab_min_width">48dp</dimen>

</resources>
2 changes: 1 addition & 1 deletion dynamic-support/src/main/res/values/dimens.xml
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@
<dimen name="ads_toolbar_margin_end_collapsing">@dimen/ads_page_horizontal_margin</dimen>
<dimen name="ads_tab_inset_start">@dimen/ads_toolbar_inset_start_small</dimen>
<dimen name="ads_tab_height">44dp</dimen>
<dimen name="ads_tab_min_width">48dp</dimen>
<dimen name="ads_tab_min_width">240dp</dimen>
<dimen name="ads_tab_indicator_margin_vertical">0dp</dimen>
<dimen name="ads_tab_indicator_margin_horizontal">@dimen/ads_margin_medium</dimen>
<dimen name="ads_tab_indicator_height">3dp</dimen>
Expand Down

0 comments on commit 16ba650

Please sign in to comment.