diff --git a/OsmAnd/res/layout/center_button_container.xml b/OsmAnd/res/layout/center_button_container.xml index 8c8fdf1617..531b6b97e8 100644 --- a/OsmAnd/res/layout/center_button_container.xml +++ b/OsmAnd/res/layout/center_button_container.xml @@ -1,19 +1,19 @@ + xmlns:osmand="http://schemas.android.com/apk/res-auto" + android:id="@+id/center_button_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1"> - + \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index d5ef10977d..2ea2775d62 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -1,7 +1,6 @@ - - + android:layout_weight="1" /> - - - + android:layout_weight="1" /> - - - - - - - - - + android:layout_weight="1" /> \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons_group.xml b/OsmAnd/res/layout/custom_radio_buttons_group.xml deleted file mode 100644 index f0caa4a375..0000000000 --- a/OsmAnd/res/layout/custom_radio_buttons_group.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OsmAnd/res/layout/gpx_list_item_tab_content.xml b/OsmAnd/res/layout/gpx_list_item_tab_content.xml index d2ce779b8b..ac7918d06a 100644 --- a/OsmAnd/res/layout/gpx_list_item_tab_content.xml +++ b/OsmAnd/res/layout/gpx_list_item_tab_content.xml @@ -1,24 +1,32 @@ + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> - + - + + - + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/left_button_container.xml b/OsmAnd/res/layout/left_button_container.xml index c6a32ec74a..e56ec7b06a 100644 --- a/OsmAnd/res/layout/left_button_container.xml +++ b/OsmAnd/res/layout/left_button_container.xml @@ -1,7 +1,6 @@ + osmand:typeface="@string/font_roboto_medium" /> - + \ No newline at end of file diff --git a/OsmAnd/res/layout/right_button_container.xml b/OsmAnd/res/layout/right_button_container.xml index bb618949af..02b237d6c0 100644 --- a/OsmAnd/res/layout/right_button_container.xml +++ b/OsmAnd/res/layout/right_button_container.xml @@ -12,8 +12,8 @@ android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:gravity="center" + android:text="@string/map_widget_speed" android:textSize="@dimen/default_desc_text_size" - osmand:typeface="@string/font_roboto_medium" - android:text="@string/map_widget_speed"/> + osmand:typeface="@string/font_roboto_medium" /> - + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 8847f953eb..47f3842711 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -86,11 +86,6 @@ public class UiUtilities { } public enum CustomRadioButtonType { - START, - END, - } - - public enum CustomRadioButtonTypeGroup { START, CENTER, END, @@ -462,6 +457,8 @@ public class UiUtilities { TextView startButtonText = buttonsView.findViewById(R.id.left_button); View startButtonContainer = buttonsView.findViewById(R.id.left_button_container); + TextView centerButtonText = buttonsView.findViewById(R.id.center_button); + View centerButtonContainer = buttonsView.findViewById(R.id.center_button_container); TextView endButtonText = buttonsView.findViewById(R.id.right_button); View endButtonContainer = buttonsView.findViewById(R.id.right_button_container); GradientDrawable background = new GradientDrawable(); @@ -477,9 +474,27 @@ public class UiUtilities { endButtonText.setTextColor(activeColor); startButtonContainer.setBackgroundDrawable(background); startButtonText.setTextColor(textColor); + + if (centerButtonContainer != null) { + centerButtonText.setTextColor(activeColor); + centerButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } + } else if (buttonType == CustomRadioButtonType.CENTER) { + background.setCornerRadii(new float[] {0, 0, 0, 0, 0, 0, 0, 0}); + centerButtonContainer.setBackgroundDrawable(background); + centerButtonText.setTextColor(textColor); + + if (endButtonContainer != null) { + endButtonText.setTextColor(activeColor); + endButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } + if (startButtonContainer != null) { + startButtonText.setTextColor(activeColor); + startButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } } else { if (isLayoutRtl) { - background.setCornerRadii(new float[]{radius, radius, 0, 0, 0, 0, radius, radius}); + background.setCornerRadii(new float[] {radius, radius, 0, 0, 0, 0, radius, radius}); } else { background.setCornerRadii(new float[]{0, 0, radius, radius, radius, radius, 0, 0}); } @@ -487,119 +502,14 @@ public class UiUtilities { endButtonText.setTextColor(textColor); startButtonContainer.setBackgroundColor(Color.TRANSPARENT); startButtonText.setTextColor(activeColor); - } - } - - public static void updateCustomRadioButtonsGroup(Context app, View buttonsView, boolean nightMode, - CustomRadioButtonTypeGroup buttonType) { - int activeColor = ContextCompat.getColor(app, nightMode - ? R.color.active_color_primary_dark - : R.color.active_color_primary_light); - int inActiveColor = ContextCompat.getColor(app, nightMode - ? R.color.text_color_secondary_dark - : R.color.text_color_secondary_light); - int textColor = ContextCompat.getColor(app, nightMode - ? R.color.text_color_primary_dark - : R.color.text_color_primary_light); - int roundedCorner = AndroidUtils.dpToPx(app, 4); - boolean isLayoutRtl = AndroidUtils.isLayoutRtl(app); - - TextView startButtonText = buttonsView.findViewById(R.id.left_button); - View startButtonContainer = buttonsView.findViewById(R.id.left_button_container); - TextView centerButtonText = buttonsView.findViewById(R.id.center_button); - View centerButtonContainer = buttonsView.findViewById(R.id.center_button_container); - TextView endButtonText = buttonsView.findViewById(R.id.right_button); - View endButtonContainer = buttonsView.findViewById(R.id.right_button_container); - GradientDrawable background = new GradientDrawable(); - background.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); - background.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(activeColor, 0.5f)); - - GradientDrawable startButtonRoundedCorner = new GradientDrawable(); - startButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - GradientDrawable endButtonRoundedCorner = new GradientDrawable(); - endButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - GradientDrawable centerButtonSharpCorner = new GradientDrawable(); - centerButtonSharpCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - - setStartEndCenterRoundedCorner(roundedCorner, isLayoutRtl, startButtonRoundedCorner, endButtonRoundedCorner, centerButtonSharpCorner); - - if (buttonType == CustomRadioButtonTypeGroup.START) { - if (isLayoutRtl) { - background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } else { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } - - if (endButtonContainer != null && centerButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - centerButtonContainer.setBackground(centerButtonSharpCorner); - centerButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (centerButtonContainer != null) { - centerButtonContainer.setBackground(endButtonRoundedCorner); - centerButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (endButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (endButtonContainer == null && centerButtonContainer == null) { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner}); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } - - } else if (buttonType == CustomRadioButtonTypeGroup.CENTER) { - centerButtonContainer.setBackgroundDrawable(background); - centerButtonText.setTextColor(textColor); - startButtonContainer.setBackground(startButtonRoundedCorner); - startButtonText.setTextColor(activeColor); - if (endButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - } else { - endButtonRoundedCorner.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); - centerButtonContainer.setBackgroundDrawable(endButtonRoundedCorner); - centerButtonText.setTextColor(textColor); - } - - } else { - if (isLayoutRtl) { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } else { - background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } - startButtonContainer.setBackground(startButtonRoundedCorner); - startButtonText.setTextColor(activeColor); - endButtonContainer.setBackgroundDrawable(background); - endButtonText.setTextColor(textColor); if (centerButtonContainer != null) { - centerButtonContainer.setBackground(centerButtonSharpCorner); centerButtonText.setTextColor(activeColor); + centerButtonContainer.setBackgroundColor(Color.TRANSPARENT); } } } - private static void setStartEndCenterRoundedCorner(int roundedCorner, boolean isLayoutRtl, GradientDrawable startButtonRoundedCorner, GradientDrawable endButtonRoundedCorner, GradientDrawable centerButtonSharpCorner) { - if (isLayoutRtl) { - startButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } else { - startButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } - if (isLayoutRtl) { - endButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } else { - endButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } - centerButtonSharpCorner.setCornerRadii(new float[]{0, 0, 0, 0, 0, 0, 0, 0}); - } - - public static void setupCompoundButtonDrawable(Context ctx, boolean nightMode, @ColorInt int activeColor, Drawable drawable) { int inactiveColor = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light); int[][] states = new int[][]{ diff --git a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java index e712d3ca01..0b167e4c97 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java @@ -7,13 +7,13 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.MarginLayoutParams; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager.OnPageChangeListener; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; @@ -24,7 +24,6 @@ import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture; import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; -import net.osmand.AndroidUtils; import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; @@ -37,6 +36,7 @@ import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.UiUtilities.CustomRadioButtonType; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType; @@ -44,7 +44,6 @@ import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType; import net.osmand.plus.helpers.GpxUiHelper.LineGraphType; import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet; import net.osmand.plus.track.TrackDisplayHelper; -import net.osmand.plus.views.controls.PagerSlidingTabStrip; import net.osmand.plus.views.controls.PagerSlidingTabStrip.CustomTabProvider; import net.osmand.plus.views.controls.WrapContentHeightViewPager.ViewAtPositionInterface; import net.osmand.util.Algorithms; @@ -53,6 +52,7 @@ import net.osmand.util.MapUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -74,7 +74,6 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private GpxDisplayItem gpxItem; private GPXTabItemType[] tabTypes; - private PagerSlidingTabStrip tabs; private SparseArray views = new SparseArray<>(); private SegmentActionsListener actionsListener; @@ -82,47 +81,17 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private boolean nightMode; - public GPXItemPagerAdapter(@NonNull final PagerSlidingTabStrip tabs, + public GPXItemPagerAdapter(@NonNull OsmandApplication app, @NonNull GpxDisplayItem gpxItem, @NonNull TrackDisplayHelper displayHelper, - @NonNull SegmentActionsListener actionsListener, - final boolean nightMode) { + boolean nightMode, @NonNull SegmentActionsListener actionsListener) { super(); - this.tabs = tabs; + this.app = app; this.gpxItem = gpxItem; - this.displayHelper = displayHelper; this.nightMode = nightMode; + this.displayHelper = displayHelper; this.actionsListener = actionsListener; - app = (OsmandApplication) tabs.getContext().getApplicationContext(); iconsCache = app.getUIUtilities(); - - tabs.setOnPageChangeListener(new OnPageChangeListener() { - - @Override - public void onPageSelected(int arg0) { - UiUtilities.CustomRadioButtonTypeGroup type; - if (arg0 == 0) { - type = UiUtilities.CustomRadioButtonTypeGroup.START; - } else if (arg0 == 1) { - type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; - } else { - type = UiUtilities.CustomRadioButtonTypeGroup.END; - } - - View parent = (View) tabs.getChildAt(0); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); - } - - @Override - public void onPageScrolled(int arg0, float arg1, int arg2) { - } - - @Override - public void onPageScrollStateChanged(int arg0) { - - } - }); - fetchTabTypes(); } @@ -589,44 +558,60 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid return view == object; } + int singleTabLayoutId[] = {R.layout.center_button_container}; + int doubleTabsLayoutIds[] = {R.layout.left_button_container, R.layout.right_button_container}; + int tripleTabsLayoutIds[] = {R.layout.left_button_container, R.layout.center_button_container, R.layout.right_button_container}; + @Override public View getCustomTabView(@NonNull ViewGroup parent, int position) { int layoutId; - if (position == 0) { - layoutId = R.layout.left_button_container; - } else if (position == 1) { - layoutId = R.layout.center_button_container; + int count = getCount(); + if (count == 1) { + layoutId = singleTabLayoutId[position]; + } else if (count == 2) { + layoutId = doubleTabsLayoutIds[position]; } else { - layoutId = R.layout.right_button_container; + layoutId = tripleTabsLayoutIds[position]; } View tab = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); tab.setTag(tabTypes[position].name()); - deselect(tab); return tab; } @Override public void select(View tab) { GPXTabItemType tabType = GPXTabItemType.valueOf((String) tab.getTag()); - UiUtilities.CustomRadioButtonTypeGroup type; - if (tabType == GPXTabItemType.GPX_TAB_ITEM_GENERAL) { - type = UiUtilities.CustomRadioButtonTypeGroup.START; - } else if (tabType == GPXTabItemType.GPX_TAB_ITEM_ALTITUDE) { - type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; - } else { - type = UiUtilities.CustomRadioButtonTypeGroup.END; - } + int index = Arrays.asList(tabTypes).indexOf(tabType); View parent = (View) tab.getParent(); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); - - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) parent.getLayoutParams(); - int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding); - int containerMargin = app.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_content_margin_small); - AndroidUtils.setMargins(params, contentPadding, containerMargin, contentPadding, containerMargin); + UiUtilities.updateCustomRadioButtons(app, parent, nightMode, getCustomRadioButtonType(index)); } @Override public void deselect(View tab) { + + } + + @Override + public void tabStylesUpdated(View tabsContainer, int currentPosition) { + ViewGroup.MarginLayoutParams params = (MarginLayoutParams) tabsContainer.getLayoutParams(); + params.height = app.getResources().getDimensionPixelSize(R.dimen.dialog_button_height); + tabsContainer.setLayoutParams(params); + UiUtilities.updateCustomRadioButtons(app, tabsContainer, nightMode, getCustomRadioButtonType(currentPosition)); + } + + private CustomRadioButtonType getCustomRadioButtonType(int index) { + int count = getCount(); + CustomRadioButtonType type = CustomRadioButtonType.CENTER; + if (count == 2) { + type = index > 0 ? CustomRadioButtonType.END : CustomRadioButtonType.START; + } else if (count == 3) { + if (index == 0) { + type = CustomRadioButtonType.START; + } else if (index == 2) { + type = CustomRadioButtonType.END; + } + } + return type; } @Override diff --git a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java index 9f2e234dcd..60141d5ccf 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java @@ -1,13 +1,11 @@ package net.osmand.plus.myplaces; import android.content.Context; -import android.graphics.drawable.GradientDrawable; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import net.osmand.AndroidUtils; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; @@ -22,6 +20,7 @@ import java.util.List; public class SegmentGPXAdapter extends ArrayAdapter { + private OsmandApplication app; private TrackDisplayHelper displayHelper; private SegmentActionsListener listener; private boolean nightMode; @@ -31,7 +30,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { @NonNull SegmentActionsListener listener, boolean nightMode) { super(context, R.layout.gpx_list_item_tab_content, items); - OsmandApplication app = (OsmandApplication) context.getApplicationContext(); + this.app = (OsmandApplication) context.getApplicationContext(); this.displayHelper = displayHelper; this.listener = listener; this.nightMode = nightMode; @@ -56,7 +55,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { WrapContentHeightViewPager pager = row.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, item, displayHelper, listener, nightMode)); + pager.setAdapter(new GPXItemPagerAdapter(app, item, displayHelper, nightMode, listener)); if (create) { tabLayout.setViewPager(pager); } else { @@ -72,9 +71,8 @@ public class SegmentGPXAdapter extends ArrayAdapter { View row = UiUtilities.getInflater(context, nightMode).inflate(R.layout.gpx_list_item_tab_content, root, false); PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); - tabLayout.setTabBackground(R.color.color_transparent); - tabLayout.setIndicatorHeight(AndroidUtils.dpToPx(context, 0)); - tabLayout.setTextSize(AndroidUtils.spToPx(context, 12f)); + tabLayout.setTabBackground(AndroidUtils.resolveAttribute(context, R.attr.btn_bg_border_inactive)); + tabLayout.setIndicatorHeight(0); tabLayout.setShouldExpand(true); WrapContentHeightViewPager pager = row.findViewById(R.id.pager); pager.setSwipeable(false); diff --git a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java index 9aa7c91391..ad266fc2ab 100644 --- a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java +++ b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java @@ -47,7 +47,7 @@ public class SegmentsCard extends BaseCard { WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = segmentView.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, displayItem, displayHelper, listener, nightMode)); + pager.setAdapter(new GPXItemPagerAdapter(app, displayItem, displayHelper, nightMode, listener)); tabLayout.setViewPager(pager); container.addView(segmentView); diff --git a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java index e38a8619b0..f6d5bdd4fd 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java @@ -68,6 +68,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { public View getCustomTabView(@NonNull ViewGroup parent, int position); public void select(View tab); public void deselect(View tab); + public void tabStylesUpdated(View tabsContainer, int currentPosition); } public interface OnTabReselectedListener { @@ -307,6 +308,10 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } } + public int getCurrentPosition() { + return currentPosition; + } + private void addTab(final int position, CharSequence title, View tabView) { TextView textView = (TextView) tabView.findViewById(R.id.tab_title); if (textView != null) { @@ -332,42 +337,32 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private void updateTabStyles() { tabsContainer.setBackgroundResource(tabBackgroundResId); - for (int i = 0; i < tabCount; i++) { - View v = tabsContainer.getChildAt(i); - v.setBackgroundResource(tabBackgroundResId); - v.setPadding(tabPadding, v.getPaddingTop(), tabPadding, v.getPaddingBottom()); - TextView tab_title = (TextView) v.findViewById(R.id.tab_title); + if (pager.getAdapter() instanceof CustomTabProvider) { + ((CustomTabProvider) pager.getAdapter()).tabStylesUpdated(tabsContainer, currentPosition); + } else { + for (int i = 0; i < tabCount; i++) { + View v = tabsContainer.getChildAt(i); + v.setBackgroundResource(tabBackgroundResId); + v.setPadding(tabPadding, v.getPaddingTop(), tabPadding, v.getPaddingBottom()); - if (tab_title != null) { - tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize); - tab_title.setTypeface(tabTypeface, pager.getCurrentItem() == i ? tabTypefaceSelectedStyle : tabTypefaceStyle); - switch (tabSelectionType) { - case ALPHA: - float alpha = pager.getCurrentItem() == i ? tabTextSelectedAlpha : tabTextAlpha; - tab_title.setAlpha(alpha); - tab_title.setTextColor(tabTextColor); - break; - case SOLID_COLOR: - tab_title.setAlpha(OPAQUE); - tab_title.setTextColor(pager.getCurrentItem() == i ? tabTextColor : tabInactiveTextColor); - break; - } - - // setAllCaps() is only available from API 14, so the upper case is made manually if we are on a - // pre-ICS-build - if (textAllCaps) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - tab_title.setAllCaps(true); - } else { - tab_title.setText(tab_title.getText().toString().toUpperCase(locale)); + TextView tabTitle = v.findViewById(R.id.tab_title); + if (tabTitle != null) { + tabTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize); + tabTitle.setTypeface(tabTypeface, pager.getCurrentItem() == i ? tabTypefaceSelectedStyle : tabTypefaceStyle); + switch (tabSelectionType) { + case ALPHA: + float alpha = pager.getCurrentItem() == i ? tabTextSelectedAlpha : tabTextAlpha; + tabTitle.setAlpha(alpha); + tabTitle.setTextColor(tabTextColor); + break; + case SOLID_COLOR: + tabTitle.setAlpha(OPAQUE); + tabTitle.setTextColor(pager.getCurrentItem() == i ? tabTextColor : tabInactiveTextColor); + break; + } + if (textAllCaps) { + tabTitle.setAllCaps(true); } - } - } - if (pager.getAdapter() instanceof CustomTabProvider) { - if (pager.getCurrentItem() == i) { - ((CustomTabProvider) pager.getAdapter()).select(v); - } else { - ((CustomTabProvider) pager.getAdapter()).deselect(v); } } } @@ -558,39 +553,41 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private void notSelected(View tab) { if (tab != null) { - TextView title = (TextView) tab.findViewById(R.id.tab_title); - if (title != null) { - title.setTypeface(tabTypeface, tabTypefaceStyle); - switch (tabSelectionType) { - case ALPHA: - title.setAlpha(tabTextAlpha); - break; - case SOLID_COLOR: - title.setTextColor(tabInactiveTextColor); - break; - } - } if (pager.getAdapter() instanceof CustomTabProvider) { ((CustomTabProvider) pager.getAdapter()).deselect(tab); + } else { + TextView title = tab.findViewById(R.id.tab_title); + if (title != null) { + title.setTypeface(tabTypeface, tabTypefaceStyle); + switch (tabSelectionType) { + case ALPHA: + title.setAlpha(tabTextAlpha); + break; + case SOLID_COLOR: + title.setTextColor(tabInactiveTextColor); + break; + } + } } } } private void selected(View tab) { if (tab != null) { - TextView title = (TextView) tab.findViewById(R.id.tab_title); - if (title != null) { - title.setTypeface(tabTypeface, tabTypefaceSelectedStyle); - switch (tabSelectionType) { - case ALPHA: - title.setAlpha(tabTextSelectedAlpha); - break; - case SOLID_COLOR: - title.setTextColor(tabTextColor); - break; - } - if (pager.getAdapter() instanceof CustomTabProvider) { - ((CustomTabProvider) pager.getAdapter()).select(tab); + if (pager.getAdapter() instanceof CustomTabProvider) { + ((CustomTabProvider) pager.getAdapter()).select(tab); + } else { + TextView title = tab.findViewById(R.id.tab_title); + if (title != null) { + title.setTypeface(tabTypeface, tabTypefaceSelectedStyle); + switch (tabSelectionType) { + case ALPHA: + title.setAlpha(tabTextSelectedAlpha); + break; + case SOLID_COLOR: + title.setTextColor(tabTextColor); + break; + } } } }