diff --git a/bottom-bar/src/androidTest/java/com/roughike/bottombar/BottomBarTest.java b/bottom-bar/src/androidTest/java/com/roughike/bottombar/BottomBarTest.java
index 935b61fd..0b503614 100644
--- a/bottom-bar/src/androidTest/java/com/roughike/bottombar/BottomBarTest.java
+++ b/bottom-bar/src/androidTest/java/com/roughike/bottombar/BottomBarTest.java
@@ -45,6 +45,7 @@ public class BottomBarTest {
private static final int ACTIVE_TAB_COLOR = Color.parseColor("#222222");
private static final int BACKGROUND_COLOR = Color.parseColor("#333333");
private static final int BADGE_BACKGROUND_COLOR = Color.parseColor("#444444");
+ private static final int BADGE_TEXT_COLOR = Color.parseColor("#555555");
private static final boolean DEFAULT_BADGE_HIDES_WHEN_SELECTED_VALUE = true;
private static final int TITLE_TEXT_APPEARANCE = com.roughike.bottombar.test.R.style.dummy_text_appearance;
private static final Typeface TYPEFACE = Typeface.DEFAULT_BOLD;
@@ -56,6 +57,7 @@ public class BottomBarTest {
.activeTabColor(ACTIVE_TAB_COLOR)
.barColorWhenSelected(BACKGROUND_COLOR)
.badgeBackgroundColor(BADGE_BACKGROUND_COLOR)
+ .badgeTextColor(BADGE_TEXT_COLOR)
.hideBadgeWhenSelected(DEFAULT_BADGE_HIDES_WHEN_SELECTED_VALUE)
.titleTextAppearance(TITLE_TEXT_APPEARANCE)
.titleTypeFace(TYPEFACE)
@@ -115,6 +117,7 @@ public void setItemsWithCustomConfig_OverridesPreviousValues() {
assertEquals(ACTIVE_TAB_COLOR, first.getActiveColor());
assertEquals(BACKGROUND_COLOR, first.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, first.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, first.getBadgeTextColor());
assertEquals(DEFAULT_BADGE_HIDES_WHEN_SELECTED_VALUE, first.getBadgeHidesWhenActive());
assertEquals(TITLE_TEXT_APPEARANCE, first.getTitleTextAppearance());
assertEquals(TYPEFACE, first.getTitleTypeFace());
@@ -384,6 +387,7 @@ public void setInactiveTabAlpha_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, inActiveTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, inActiveTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, inActiveTab.getBadgeTextColor());
assertEquals(TITLE_TEXT_APPEARANCE, inActiveTab.getTitleTextAppearance());
assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
}
@@ -417,6 +421,7 @@ public void setActiveTabAlpha_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, activeTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, activeTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, activeTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, activeTab.getBadgeTextColor());
assertEquals(TITLE_TEXT_APPEARANCE, activeTab.getTitleTextAppearance());
assertEquals(TYPEFACE, activeTab.getTitleTypeFace());
}
@@ -455,6 +460,7 @@ public void setInactiveColor_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, inActiveTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, inActiveTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, inActiveTab.getBadgeTextColor());
assertEquals(TITLE_TEXT_APPEARANCE, inActiveTab.getTitleTextAppearance());
assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
}
@@ -491,6 +497,7 @@ public void setActiveColor_LeavesOtherValuesIntact() {
assertEquals(Color.BLUE, inActiveTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, inActiveTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, inActiveTab.getBadgeTextColor());
assertEquals(TITLE_TEXT_APPEARANCE, inActiveTab.getTitleTextAppearance());
assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
}
@@ -526,6 +533,37 @@ public void setBadgeBackgroundColor_LeavesOtherValuesIntact() {
assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
}
+ @Test
+ @UiThreadTest
+ public void setBadgeTextColor_UpdatesColor() {
+ BottomBarTab inActiveTab = bottomBar.getTabAtPosition(1);
+ inActiveTab.setBadgeCount(3);
+
+ int previousBadgeTextColor = inActiveTab.getBadgeTextColor();
+ int testColor = Color.GREEN;
+ assertNotEquals(testColor, previousBadgeTextColor);
+
+ bottomBar.setBadgeTextColor(testColor);
+ assertEquals(testColor, inActiveTab.getBadgeTextColor());
+ }
+
+ @Test
+ public void setBadgeTextColor_LeavesOtherValuesIntact() {
+ bottomBar.setBadgeTextColor(Color.BLUE);
+
+ BottomBarTab inActiveTab = bottomBar.getTabAtPosition(1);
+ assertNotEquals(inActiveTab, bottomBar.getCurrentTab());
+
+ assertEquals(INACTIVE_TAB_ALPHA, inActiveTab.getInActiveAlpha(), 0);
+ assertEquals(ACTIVE_TAB_ALPHA, inActiveTab.getActiveAlpha(), 0);
+ assertEquals(INACTIVE_TAB_COLOR, inActiveTab.getInActiveColor());
+ assertEquals(ACTIVE_TAB_COLOR, inActiveTab.getActiveColor());
+ assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
+ assertEquals(Color.BLUE, inActiveTab.getBadgeTextColor());
+ assertEquals(TITLE_TEXT_APPEARANCE, inActiveTab.getTitleTextAppearance());
+ assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
+ }
+
@Test
@UiThreadTest
public void setBadgeHidesWhenSelected_UpdatesBadgeHidesWhenSelected() {
@@ -550,6 +588,7 @@ public void setBadgeHidesWhenSelected_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, tab.getActiveColor());
assertEquals(BACKGROUND_COLOR, tab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, tab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, tab.getBadgeTextColor());
assertTrue(tab.getBadgeHidesWhenActive());
assertEquals(TITLE_TEXT_APPEARANCE, tab.getTitleTextAppearance());
assertEquals(TYPEFACE, tab.getTitleTypeFace());
@@ -582,6 +621,7 @@ public void setTitleTextAppearance_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, inActiveTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, inActiveTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, inActiveTab.getBadgeTextColor());
assertEquals(-666, inActiveTab.getTitleTextAppearance());
assertEquals(TYPEFACE, inActiveTab.getTitleTypeFace());
}
@@ -614,6 +654,7 @@ public void setTitleTypeface_LeavesOtherValuesIntact() {
assertEquals(ACTIVE_TAB_COLOR, inActiveTab.getActiveColor());
assertEquals(BACKGROUND_COLOR, inActiveTab.getBarColorWhenSelected());
assertEquals(BADGE_BACKGROUND_COLOR, inActiveTab.getBadgeBackgroundColor());
+ assertEquals(BADGE_TEXT_COLOR, inActiveTab.getBadgeTextColor());
assertEquals(TITLE_TEXT_APPEARANCE, inActiveTab.getTitleTextAppearance());
assertEquals(Typeface.DEFAULT, inActiveTab.getTitleTypeFace());
}
diff --git a/bottom-bar/src/androidTest/java/com/roughike/bottombar/TabParserTest.java b/bottom-bar/src/androidTest/java/com/roughike/bottombar/TabParserTest.java
index e6709111..039375cc 100644
--- a/bottom-bar/src/androidTest/java/com/roughike/bottombar/TabParserTest.java
+++ b/bottom-bar/src/androidTest/java/com/roughike/bottombar/TabParserTest.java
@@ -120,6 +120,15 @@ public void badgeBackgroundColorAsExpected() {
assertEquals(Color.parseColor("#00F0F0"), tabs.get(4).getBadgeBackgroundColor());
}
+ @Test
+ public void badgeTextColorAsExpected() {
+ assertEquals(Color.parseColor("#FF0000"), tabs.get(0).getBadgeTextColor());
+ assertEquals(Color.parseColor("#00FF00"), tabs.get(1).getBadgeTextColor());
+ assertEquals(Color.parseColor("#F00000"), tabs.get(2).getBadgeTextColor());
+ assertEquals(Color.parseColor("#00F000"), tabs.get(3).getBadgeTextColor());
+ assertEquals(Color.parseColor("#00F0F0"), tabs.get(4).getBadgeTextColor());
+ }
+
@Test
public void correctBadgeHidingPolicies() {
assertFalse(tabs.get(0).getBadgeHidesWhenActive());
diff --git a/bottom-bar/src/androidTest/res/xml/dummy_tabs_five.xml b/bottom-bar/src/androidTest/res/xml/dummy_tabs_five.xml
index 97fa200f..2670bbe8 100644
--- a/bottom-bar/src/androidTest/res/xml/dummy_tabs_five.xml
+++ b/bottom-bar/src/androidTest/res/xml/dummy_tabs_five.xml
@@ -1,8 +1,8 @@
-
-
-
-
-
+
+
+
+
+
\ No newline at end of file
diff --git a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBar.java b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBar.java
index 350cc316..5dae7b61 100644
--- a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBar.java
+++ b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBar.java
@@ -77,6 +77,7 @@ public class BottomBar extends LinearLayout implements View.OnClickListener, Vie
private int inActiveTabColor;
private int activeTabColor;
private int badgeBackgroundColor;
+ private int badgeTextColor;
private boolean hideBadgeWhenActive;
private boolean longPressHintsEnabled;
private int titleTextAppearance;
@@ -208,6 +209,7 @@ private void populateAttributes(Context context, AttributeSet attrs, int defStyl
inActiveTabColor = ta.getColor(R.styleable.BottomBar_bb_inActiveTabColor, defaultInActiveColor);
activeTabColor = ta.getColor(R.styleable.BottomBar_bb_activeTabColor, defaultActiveColor);
badgeBackgroundColor = ta.getColor(R.styleable.BottomBar_bb_badgeBackgroundColor, Color.RED);
+ badgeTextColor = ta.getColor(R.styleable.BottomBar_bb_badgeTextColor, Color.WHITE);
hideBadgeWhenActive = ta.getBoolean(R.styleable.BottomBar_bb_badgesHideWhenActive, true);
titleTextAppearance = ta.getResourceId(R.styleable.BottomBar_bb_titleTextAppearance, 0);
titleTypeFace = getTypeFaceFromAsset(ta.getString(R.styleable.BottomBar_bb_titleTypeFace));
@@ -318,6 +320,7 @@ private BottomBarTab.Config getTabConfig() {
.activeTabColor(activeTabColor)
.barColorWhenSelected(defaultBackgroundColor)
.badgeBackgroundColor(badgeBackgroundColor)
+ .badgeTextColor(badgeTextColor)
.hideBadgeWhenSelected(hideBadgeWhenActive)
.titleTextAppearance(titleTextAppearance)
.titleTypeFace(titleTypeFace)
@@ -697,6 +700,17 @@ public void update(BottomBarTab tab) {
});
}
+ public void setBadgeTextColor(@ColorInt int color) {
+ badgeTextColor = color;
+
+ batchPropertyApplier.applyToAllTabs(new BatchTabPropertyApplier.TabPropertyUpdater() {
+ @Override
+ public void update(BottomBarTab tab) {
+ tab.setBadgeTextColor(badgeTextColor);
+ }
+ });
+ }
+
/**
* Controls whether the badge (if any) for active tabs
* should be hidden or not.
diff --git a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarBadge.java b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarBadge.java
index af5b8546..103a9ce6 100644
--- a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarBadge.java
+++ b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarBadge.java
@@ -110,6 +110,10 @@ void setColoredCircleBackground(int circleColor) {
setBackgroundCompat(backgroundCircle);
}
+ void setBadgeTextColor(int badgeTextColor) {
+ setTextColor(badgeTextColor);
+ }
+
private void wrapTabAndBadgeInSameContainer(final BottomBarTab tab) {
ViewGroup tabContainer = (ViewGroup) tab.getParent();
tabContainer.removeView(tab);
diff --git a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarTab.java b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarTab.java
index d33e1e30..1bbacee3 100644
--- a/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarTab.java
+++ b/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarTab.java
@@ -61,6 +61,7 @@ public class BottomBarTab extends LinearLayout {
private int activeColor;
private int barColorWhenSelected;
private int badgeBackgroundColor;
+ private int badgeTextColor;
private boolean badgeHidesWhenActive;
private AppCompatImageView iconView;
private TextView titleView;
@@ -84,6 +85,7 @@ void setConfig(@NonNull Config config) {
setActiveColor(config.activeTabColor);
setBarColorWhenSelected(config.barColorWhenSelected);
setBadgeBackgroundColor(config.badgeBackgroundColor);
+ setBadgeTextColor(config.badgeTextColor);
setBadgeHidesWhenActive(config.badgeHidesWhenSelected);
setTitleTextAppearance(config.titleTextAppearance);
setTitleTypeface(config.titleTypeFace);
@@ -280,6 +282,18 @@ public void setBadgeBackgroundColor(int badgeBackgroundColor) {
}
}
+ public int getBadgeTextColor() {
+ return badgeTextColor;
+ }
+
+ public void setBadgeTextColor(int badgeTextColor) {
+ this.badgeTextColor = badgeTextColor;
+
+ if (badge != null) {
+ badge.setBadgeTextColor(badgeBackgroundColor);
+ }
+ }
+
public boolean getBadgeHidesWhenActive() {
return badgeHidesWhenActive;
}
@@ -329,6 +343,7 @@ public void setBadgeCount(int count) {
if (badge == null) {
badge = new BottomBarBadge(getContext());
badge.attachToTab(this, badgeBackgroundColor);
+ badge.setTextColor(badgeTextColor);
}
badge.setCount(count);
@@ -647,6 +662,7 @@ public static class Config {
private final int activeTabColor;
private final int barColorWhenSelected;
private final int badgeBackgroundColor;
+ private final int badgeTextColor;
private final int titleTextAppearance;
private final Typeface titleTypeFace;
private boolean badgeHidesWhenSelected = true;
@@ -658,6 +674,7 @@ private Config(Builder builder) {
this.activeTabColor = builder.activeTabColor;
this.barColorWhenSelected = builder.barColorWhenSelected;
this.badgeBackgroundColor = builder.badgeBackgroundColor;
+ this.badgeTextColor = builder.badgeTextColor;
this.badgeHidesWhenSelected = builder.hidesBadgeWhenSelected;
this.titleTextAppearance = builder.titleTextAppearance;
this.titleTypeFace = builder.titleTypeFace;
@@ -670,6 +687,7 @@ public static class Builder {
private int activeTabColor;
private int barColorWhenSelected;
private int badgeBackgroundColor;
+ private int badgeTextColor;
private boolean hidesBadgeWhenSelected = true;
private int titleTextAppearance;
private Typeface titleTypeFace;
@@ -704,6 +722,11 @@ public Builder badgeBackgroundColor(@ColorInt int color) {
return this;
}
+ public Builder badgeTextColor(@ColorInt int color) {
+ this.badgeTextColor = color;
+ return this;
+ }
+
public Builder hideBadgeWhenSelected(boolean hide) {
this.hidesBadgeWhenSelected = hide;
return this;
diff --git a/bottom-bar/src/main/java/com/roughike/bottombar/TabParser.java b/bottom-bar/src/main/java/com/roughike/bottombar/TabParser.java
index 65ec8fe2..3dc1dc5b 100644
--- a/bottom-bar/src/main/java/com/roughike/bottombar/TabParser.java
+++ b/bottom-bar/src/main/java/com/roughike/bottombar/TabParser.java
@@ -22,6 +22,7 @@
import static com.roughike.bottombar.TabParser.TabAttribute.ACTIVE_COLOR;
import static com.roughike.bottombar.TabParser.TabAttribute.BADGE_BACKGROUND_COLOR;
+import static com.roughike.bottombar.TabParser.TabAttribute.BADGE_TEXT_COLOR;
import static com.roughike.bottombar.TabParser.TabAttribute.BADGE_HIDES_WHEN_ACTIVE;
import static com.roughike.bottombar.TabParser.TabAttribute.BAR_COLOR_WHEN_SELECTED;
import static com.roughike.bottombar.TabParser.TabAttribute.ICON;
@@ -134,6 +135,11 @@ private BottomBarTab parseNewTab(@NonNull XmlResourceParser parser, @IntRange(fr
if (badgeBackgroundColor == COLOR_NOT_SET) continue;
workingTab.setBadgeBackgroundColor(badgeBackgroundColor);
break;
+ case BADGE_TEXT_COLOR:
+ int badgeTextColor = getColorValue(parser, i);
+ if (badgeTextColor == COLOR_NOT_SET) continue;
+ workingTab.setBadgeTextColor(badgeTextColor);
+ break;
case BADGE_HIDES_WHEN_ACTIVE:
boolean badgeHidesWhenActive = parser.getAttributeBooleanValue(i, true);
workingTab.setBadgeHidesWhenActive(badgeHidesWhenActive);
@@ -188,6 +194,7 @@ private int getColorValue(@NonNull XmlResourceParser parser, @IntRange(from = 0)
ACTIVE_COLOR,
BAR_COLOR_WHEN_SELECTED,
BADGE_BACKGROUND_COLOR,
+ BADGE_TEXT_COLOR,
BADGE_HIDES_WHEN_ACTIVE,
IS_TITLELESS
})
@@ -199,6 +206,7 @@ private int getColorValue(@NonNull XmlResourceParser parser, @IntRange(from = 0)
String ACTIVE_COLOR = "activeColor";
String BAR_COLOR_WHEN_SELECTED = "barColorWhenSelected";
String BADGE_BACKGROUND_COLOR = "badgeBackgroundColor";
+ String BADGE_TEXT_COLOR = "badgeTextColor";
String BADGE_HIDES_WHEN_ACTIVE = "badgeHidesWhenActive";
String IS_TITLELESS = "iconOnly";
}
diff --git a/bottom-bar/src/main/res/values/attrs.xml b/bottom-bar/src/main/res/values/attrs.xml
index 8b382f4d..f0bc7a83 100644
--- a/bottom-bar/src/main/res/values/attrs.xml
+++ b/bottom-bar/src/main/res/values/attrs.xml
@@ -15,6 +15,7 @@
+